目录
基本逻辑门
编码器
译码器
数据选择器
数值比较器
三态缓冲器
奇偶校验器
组合逻辑器件有逻辑门、编码器与译码器、数据选择器和数值比较器、加法器、三态器件和奇偶校验器等多种类型。
基本逻辑门
Verilog HDL中定义了实现七种逻辑关系的基元,例化这些基元就可以描述门电路。同时,Verilog中定义了九类操作符,应用逻辑运算符或者位操作符,也可以很方便地描述门电路。
module Basic_Gates (a,b,Yand,Yor,Ynot,Ynand,Ynor,Yxor,Yxnor);input a,b;output wire Yand,Yor,Ynot,Ynand,Ynor,Yxor,Yxnor;assign Yand = a & b;assign Yor = a | b;assign Ynot = ~a;assign Ynand = ~( a & b);assign Ynor = ~(a | b);assign Yxor = a ^ b;assign Yxnor = ~(a ^ b);
endmodule
编码器
Verilog HDL中定义了实现七种逻辑关系的基元,例化这些基元就可以描述门电路。同时,Verilog中定义了九类操作符,应用逻辑运算符或者位操作符,也可以很方便地描述门电路。
module HC148a (input s_n, // 控制端,低电平有效input [7:0] i_n, // 高、低电平输入端,低电平有效output reg [2:0] y_n, // 二进制反码输出端output wire ys_n, // 无编码信号指示,低电平有效output wire yex_n // 有编码输出指示,低电平有效);// 有无编码标志逻辑assign ys_n = s_n ? 1'b1 : ( &i_n ? 1'b0 : 1'b1 );assign yex_n = s_n ? 1'b1 : ( &i_n ? 1'b1 : 1'b0 );// 编码逻辑,应用多重条件语句描述always @(s_n,i_n) // 当控制信号或输入高、低电平发生变化时if (!s_n) begin // 当控制信号有效时if (!i_n[7]) y_n = 3'b000; else if (!i_n[6]) y_n = 3'b001; else if (!i_n[5]) y_n = 3'b010; else if (!i_n[4]) y_n = 3'b011; else if (!i_n[3]) y_n = 3'b100; else if (!i_n[2]) y_n = 3'b101;
译码器
74HC138是3线-8线译码器,能够将3位二进制码翻译成8个高/低电平信号,其逻辑功能如下表所示。
module HC138a(s1,s2_n,s3_n,bin_code,y_n);input s1,s2_n,s3_n;input [2:0] bin_code;output reg [7:0] y_n;wire en; // 内部线网定义assign en = s1 && (!s2_n) && (!s3_n);always @(en,bin_code)if (en) case (bin_code)3'b000 : y_n = 8'b11111110;3'b001 : y_n = 8'b11111101;3'b010 : y_n = 8'b11111011;3'b011 : y_n = 8'b11110111;3'b100 : y_n = 8'b11101111;3'b101 : y_n = 8'b11011111;3'b110 : y_n = 8'b10111111;3'b111 : y_n = 8'b01111111;default : y_n = 8'b11111111;endcaseelse y_n = 8'b11111111;endmodule
译码器可以应用行为描述、数据流描述和结构描述三种方式进行描述。
显示译码器用于将BCD/二进制码翻译成高/低电平信号,以驱动数码管显示数字信息。
CD4511是常用的BCD显示译码器,输出高电平有效,同时具有灯测试、灭灯和锁存三种附加功能。CD4511的逻辑功能如表所示。
数据选择器
数据选择器在地址信号的作用下,能够从多路输入数据中选择其中一路输出。 74HC151为8选一数据选择器,具有两个互补的输出端,其逻辑功能如表所示。
module HC151(s_n,d,addr,y,w_n);input s_n;input [7:0] d;input [2:0] addr;output reg y;output wire w_n;// 逻辑定义assign w_n=~y;// 功能描述always @(s_n,d,addr)if (!s_n)case (addr)3'b000: y = d[0];3'b001: y = d[1];3'b010: y = d[2];3'b011: y = d[3];
应用EDA技术设计数字系统时,不受具体器件的限制,可以根据需要用HDL描述任何功能电路。
数值比较器
数值比较器用于比较数值的大小。 74HC85是4位数值比较器,用于比较两个4位二进制数的大小。同时,考虑到器件功能扩展的需要,74HC85还附加有三个来自低位比较结果的输入端。
module HC85(a,b,ia_gt_b,ia_eq_b,ia_lt_b,ya_gt_b,ya_eq_b,ya_lt_b);// gt=greater than, eq=equal,lt=less than. input [3:0] a,b;input ia_gt_b,ia_eq_b,ia_lt_b; output reg ya_gt_b,ya_eq_b,ya_lt_b; // 内部线网定义 wire [2:0] iIN;// 拼接操作assign iIN={ia_gt_b,ia_eq_b,ia_lt_b}; always @(a,b,iIN) // 组合过程,比较逻辑if (a > b) begin ya_gt_b = 1'b1; ya_eq_b = 1'b0; ya_lt_b = 1'b0; endelse if (a < b) begin ya_gt_b = 1'b0; ya_eq_b = 1'b0; ya_lt_b = 1'b1; endelse if (iIN == 3'b100) begin ya_gt_b = 1'b1; ya_eq_b = 1'b0; ya_lt_b = 1'b0; end else if (iIN == 3'b001) begin ya_gt_b = 1'b0; ya_eq_b = 1'b0; ya_lt_b = 1'b1; endelse begin ya_gt_b = 1'b0; ya_eq_b = 1'b1; ya_lt_b = 1'b0; endendmodule
三态缓冲器
三态缓冲器有低电平、高电平和高阻三种输出状态,用于总线驱动或双向数据接口的构建。
三态缓冲器有三态反相器和三态驱动器两种类型。当控制端有效时,三态反相器的输出与输入反相,三态驱动器的输出与输入同相。
74HC240/244是双4位三态缓冲器,其中74HC240为三态反相器,74HC244为三态驱动器。 74HC240/244的逻辑功能如下表所示。
module HC240(g1_n,a1,y1,g2_n,a2,y2);input g1_n,g2_n; // 控制端input [3:0] a1,a2; // 数据输入端 output wire [3:0] y1,y2;// 功能描述,应用条件操作符assign y1 = (!g1_n)? ~a1 : 4'bz; assign y2 = (!g2_n)? ~a2 : 4'bz; endmodule
奇偶校验器
奇偶校验是并行通信中最基本的检错方法,分为奇校验和偶校验两种。
reg sum=0;
always @ (din) begininteger i;for ( i=8; i>=0; i=i-1;)if ( din[i] ) sum=sum+1;case (sum)0:begin ... end1:begin ... end default: begin ... endendcaseend