第8,9讲 Verilog组合逻辑电路设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

行为描述 module gate3(F,A,B,C,D); input A,B,C,D; output F; reg F; always @(A or B or C or D) //过程赋值 //过程赋值 begin F=(~(A&B))|(B&C&D); ( ) end endmodule
2.三态门设计(两种描述方法) 2.三态门设计(两种描述方法) 三态门设计 用bufif1关键字描述的三态门 (方法一) 关键字描述的三态门 方法一) module input output tri bufif1 tri_1 (in, en, out); in, en; out; //tri的功能与 的功能与wire完全一样 完全一样 的功能与 b1(out, in, en);
8-3 优先编码器 if语句实现 语句实现
8-3 优先编码器 if语句实现 语句实现
module encoder8_3(none_on,out,a,b,c,d,e,f,g,h); output none_on; output[2:0] out; input a,b,c,d,e,f,g,h; reg[3:0] outtemp; assign {none_on,out}=outtemp; always @(a or b or c or d or e or f or g or h) begin if(h) outtemp=4'b0111; else if(g) outtemp=4'b0110; else if(f) outtemp=4'b0101; else if(e) outtemp=4'b0100; else if(d) outtemp=4'b0011; else if(c) outtemp=4'b0010; else if(b) outtemp=4'b0001; else if(a) outtemp=4'b0000; else outtemp=4'b1000; end endmodule
第八讲 组合逻辑电路设计
◆ 基本门电路 ◆ 加法器
主要 内容
◆ 比较器 ◆ 编码器 ◆ 译码器 ◆ 多路数据选择器 ◆ 其它组合电路设计
1.基本门电路设计 基本门电路设计 //门级结构描述 //门级结构描述 module gate1(F,A,B,C,D); input A,B,C,D; output F; nand(F1,A,B); //调用门元件 调用门元件 and(F2,B,C,D); or(F,F1,F2); endmodule
8-3编码器 编码器
若输入端每次有且只有一个是有效的(高电平),那么用一个 若输入端每次有且只有一个是有效的(高电平),那么用一个 ), 8位的二进制串表示该输入信号是很浪费的 位的二进制串表示该输入信号是很浪费的 如用00010000表示 表示in[4]端口有效的输入信号), 端口有效的输入信号), (如用 表示 端口有效的输入信号 可以把这个二进制串用一个3位的二进制数表示 可以把这个二进制串用一个 位的二进制数表示 分别表示in[0]~in[7]是有效的),这就是 编码器。 是有效的),这就是8-3编码器 (000~111分别表示 ~ 分别表示 ~ 是有效的),这就是
out;
endmodule
2.三态门设计 2.三态门设计
方法二) 数据流描述的三态门 (方法二) module input output tri_2 (out,in, en); in, en; out;
assign out=en?in:’bz; //若en=1,out=in;若en=0,out为高阻态 若 , ; , 为高阻态 endmodule
注意下面实现的是同或的功能: 注意下面实现的是同或的功能: 同或的功能 X(i)=A(i)B(i)+A(i)’B(i)’
比较器
大小比较器的三个输出为: 大小比较器的三个输出为:A_gt_B ,A_it_B和A_eq_B 和 。 当A>B时, A_gt_B=1; 当A<B时, A_it_B=1; 时 ; 时 ; 当A=B时, A_eq_B=1; 时 ; 其计算公式为: 其计算公式为: A_gt_B=(A[3]&~B[3]) | (X[3]&A[2]&~B[2]) | (X[3]&X[2]&A[1]&~B[1]) | (X[3]&X[2]&X[1]&A[0]&~B[0]), A_it_B=(~A[3]&B[3]) | (X[3]&~A[2]&B[2]) | (X[3]&X[2]&~A[1]&B[1]) | (X[3]&X[2]&X[1]&~A[0]&B[0]), A_eq_B=X[3]&X[2]&X[1]&X[0];
比较器(方法一) 比较器(方法一)
assign A_gt_B=(A[3]&~B[3]) | (X[3]&A[2]&~B[2]) | (X[3]&X[2]&A[1]&~B[1]) | (X[3]&X[2]&X[1]&A[0]&~B[0]), A_it_B=(~A[3]&B[3]) | (X[3]&~A[2]&B[2]) | (X[3]&X[2]&~A[1]&B[1]) | (X[3]&X[2]&X[1]&~A[0]&B[0]), A_eq_B=X[3]&X[2]&X[1]&X[0]; endmodule
???:如何用行为方式描述三态门? ???:如何用行为方式描述三态门? 如何用行为方式描述三态门
3.加法器 加法器
4位全加器 module adder4(cout,sum,ina,inb,cin); output[3:0] sum; output cout; input[3:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule
3-8解码器 解码器
编码器工作过程恰恰相反, 解码器的 和8-3编码器工作过程恰恰相反,3-8解码器的 编码器工作过程恰恰相反 工作是把已编码成3位的二进制数转换成相应 工作是把已编码成 位的二进制数转换成相应 的未编码前的8位二进制串 位二进制串。 的未编码前的 位二进制串。
比较器(方法二) 比较器(方法二)
module comp2(A,B,A_gt_B,A_it_B,A_eq_B); input [3:0] A,B; output A_gt_B,A_it_B,A_eq_B; assign A_gt_B=(A>B); assign A_it_B=(A<B); assign A_eq_B=(A==B); endmodule
用函数定义的8-3 优先编码器 用函数定义的
module code8_3(in,out); , output[2:0] out; input[7:0] in; function[2:0] code; input[7:0] in; If (in[7]) code=3’d7; Else if (in[6]) code=3’d6; Else if (in[5]) code=3’d5; Else if (in[4]) code=3’d4; Else if (in[3]) code=3’d3; Else if (in[2]) code=3’d2; Else if (in[1]) code=3’d1; Else code=3’d0; endfunction assign out=code(in); end endmodule
比较器
一个四位大小比较器的输入是两个四位数A和 , 一个四位大小比较器的输入是两个四位数 和B,我们 可以将它们写成下面的形式,最左边的为最高有效位: 可以将它们写成下面的形式,最左边的为最高有效位: A=A(3)A(2)A(1)A(0) B=B(3)B(2)B(1)B(0)
两个数的比较规则:从最高有效位开始, 逐位进行。 两个数的比较规则:从最高有效位开始, 逐位进行。如果两个 位不相等,则该位值为0的数为较小的数 的数为较小的数。 位不相等,则该位值为 的数为较小的数。为了用逻辑等式实现 这个功能,我们需要定义一个中间变量X。 这个功能,我们需要定义一个中间变量 。
比较器(方法一) 比较器(方法一)
module comp1(A,B,A_gt_B,A_it_B,A_eq_B); input [3:0] A,B; output A_gt_B,A_it_B,A_eq_B; wire [3:0] X; assign X[0]=(A[0]&B[0]) | (~A[0]&~B[0]), X[1]=(A[1]&B[1]) | (~A[1]&~B[1]), X[2]=(A[2]&B[2]) | (~A[2]&~B[2]), X[3]=(A[3]&B[3]) | (~A[3]&~B[3]);
8-3编码器 编码器case语句实现 编码器 语句实现
module encoder (in,out); input [7:0] in; output [2:0] out;reg [2:0] out; always @(in) case(in) 8'b00000001 : out = 3’b000; // in[0]为1时输出编码000 in[0]为 时输出编码000 8'b00000010 : out = 3’b001; // in[1]为1时输出编码001 in[1]为 时输出编码001 8'b00000100 : out = 3’b010; // in[2]为1时输出编码010 in[2]为 时输出编码010 8'b00001000 : out = 3’b011; // in[3]为1时输出编码011 in[3]为 时输出编码011 8'b00010000 : out = 3’b100; // in[4]为1时输出编码100 in[4]为 时输出编码100 8'b00100000 : out = 3’b101; // in[5]为1时输出编码101 in[5]为 时输出编码101 8'b01000000 : out = 3’b110; // in[6]为1时输出编码110 in[6]为 时输出编码110 8'b10000000 : out = 3’b111; // in[7]为1时输出编码111 in[7]为 时输出编码111 endcase endmodule
比ቤተ መጻሕፍቲ ባይዱ器(方法三) 比较器(方法三)
module comp3(A,B,A_gt_B,A_it_B,A_eq_B); input [3:0] A,B; output A_gt_B,A_it_B,A_eq_B; reg A_gt_B,A_it_B,A_eq_B; always @(A or B) begin if(A>B) begin A_gt_B<=1;A_it_B<=0;A_eq_B<=0;end else if(A<B)begin A_gt_B<=0; A_it_B<=1;A_eq_B<=0; end else if(A==B) begin A_gt_B<=0;A_it_B<=0;A_eq_B<=1; end else begin A_gt_B<=0;A_it_B<=0;A_eq_B<=0;end end endmodule
编码器
编码器是指能实现用二进制对输入信号进行编码的 电路, 电路,对于每一路输入信号将输出唯一的二进制代 码数。编码器又分为一般编码器 优先编码器两种 一般编码器和 码数。编码器又分为一般编码器和优先编码器两种 一般编码器一次只能输入一个信号, ,一般编码器一次只能输入一个信号,优先编码器 一次允许输入多个信号。 一次允许输入多个信号。 下图所示是一个8-3编码器,其中 下图所示是一个 编码器,其中in[7]~in[0]是8位 编码器 ~ 是 位 数据输入端,out[2]~out[0]是3位编码输出端。 数据输入端, ~ 是 位编码输出端。 位编码输出端
F1
F2
1.基本门电路设计 基本门电路设计
数据流描述 module gate2(F,A,B,C,D); input A,B,C,D; output F; assign F=(~(A&B))|(B&C&D); ( ) //assign持续赋值 持续赋值 endmodule
1.基本门电路设计 基本门电路设计
相关文档
最新文档