第四章 Verilog_HDL常用组合电路设计

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

/***************************************** \ 一位全加器的行为建模(2): \****************************************/ module fa_behav1(a,b,cin,sum,count) input a,b,cin; 直接采用“+” output sum,count; 来描述,低位放 reg sum,count; 在sum变量中,进
加法器电路



根据上述的真值关系,可以得到两个布 尔代数表达式如下: 根据上述表达式,按照原理图的方法设 计加法器,原理图如图1所示。 图1 一位加法器原理图
半加器电路原理图
根据上述的真值关系,可以得到两个布尔代数表达式如下:
b a1 a 2 a1 a 2 c a1 a 2
always@(a or b or c or d or sel) begin case(sel) 2’b00:dout=a; 2’b01:dout=b; 2’b10:dout=c; 2’b11:dout=d; endcase end endmodule
/******************************************\ mux4_1.v参考设计(2) \******************************************/ module mux4_1(a,b,c,d,sel,dout); input a,b,c,d; input [1:0] sel; output dout; reg dout; always@(a or b or c or d or sel) begin if(sel==2’b00) dout=a; else if(sel==2’b01) dout=b; else if(sel==2’b10) dout=c; else dout=d; end endmodule
LED数码管结构图
参考设计
module bin27seg (data_in ,data_out ); input [3:0] data_in ; output [6:0] data_out ; reg [6:0] data_out ; always @(data_in ) begin
case (data_in ) 4'b0001: data_out = 7'b0000110; 4'b0010: data_out = 7'b1011011; 4'b0011: data_out = 7'b1001111; 4'b0100: data_out = 7'b1100110; 4'b0101: data_out = 7'b1101101; 4'b0110: data_out = 7'b1111101; 4'b0111: data_out = 7'b0000111; 4'b1000: data_out = 7'b1111111; 4'b1001: data_out = 7'b1101111; 4'b1010: data_out = 7'b1110111; 4'b1011: data_out = 7'b1111100; 4'b1100: data_out = 7'b0111001; 4'b1101: data_out = 7'b1011110; 4'b1110: data_out = 7'b1111001; 4'b1111: data_out = 7'b1110001; default: data_out = 7'b0111111; endcase end endmodule
七段显示译码器设计
一、目的 (1) 设计一个BCD码-7段线译码器; (2) 学习用Verilog HDL进行逻辑描述; (3) 熟悉case语句的用法。
二.设计要求
七段显示译码器可直接驱动七段数码 管,七段数码管结构如下图所示:考 虑设计一个7段译码器,用于驱动共 阴极接地的七段数码管,并规定用1 表示数码管中线段的点亮状态,0表 示线段的熄灭状态
全加器
表2 全加器真值表
A B Ci-1
S
全加器
Ci
图2 全加器框图
全加器
S Ai Bi Ci 1 Ai Bi Ci 1 Ai Bi Ci 1 Ai Bi Ci 1
Ai (Bi Ci1 ) Ai (Bi Ci1 ) Ai Bi Ci1
Ci Ai Bi Ci1 Ai Bi Ci1 Ai Bi C i1 Ai Bi Ci1 Bi Ci1 Ai Ci1 Ai Bi
根据上述表达式,按照原理图的方法设计加法器, 原理图如图1所示。
图1
一位加法器原理图
/******************************************\ adder.v参考设计(1) \******************************************/
module adder( a1, a2, b, c ); input a1,a2; output b; output c; wire b,c; assign b=a1^a2; assign c=a&b; endmodule
全加器


一位二进制数相加不仅要考虑本位的加数与被 加数,还要考虑低位的进位信号,而输出包括 本位和以及向高位的进位信号,这就是通常所 说的全加器。一位全加器是构成多位加法器的 基础,应用非常广泛。 一位全加器有三个输入端(两个加数Ai和Bi, 以及低位的进位Ci-1),输出有两个(加法和 Si、加法向高位的进位Ci),全加器电路框图 如图2所示,真值表如表2所示。
常用组合电路设计指导
主要内容
MUX设计 加法器电路 译码器设计 7段显示译码器设计 编码器设计
组合逻辑电路定义

组合逻辑含义:
电路任一时刻的输出状态只决定 于该时刻各输入状态的组合,而与电路 的原状态无关。组合电路就是由门电路 组合而成,电路中没有记忆单元,没有 反馈通路。
组合逻辑建模方法
assign dout=(sel==2’b00)?a: (sel==2’b01)?b: (sel==2’b10)?c:d; endmodule
半加器电路

真值表
a1
b
加法器
a2 c
a1 0 0 1 1
a2 0 1 0 1
b 0 1 1 0
c 0 0 0 1
半加器

能对两个一位二进制数相加,求得其和 值及进位的逻辑电路称为半加器。半加 器的特点是:只考虑两个一位二进制数 的相加,而不考虑来自低位进位的运算 电路,称为半加器。任务7中设计的一位 加法器级为半加器。

建模思路:
用语言表述出来:针对输入,总有确定的输出,输入一变化,输出就随 之变化

建模规范: 1.过程(进程)之外,本来就是并行,直 接建模 2.过程(进程)之内:a.所有输入变化立 刻变化。b.针对输入,输出有确定值
Verilog 过程及译码电路


always 过程语句 always定义的过程块是一个电路,电路 从上电开始就会一直执行; (从代码一开始就执行,执行完了再 回到过程块的最初来执行,周而复始, 不会停止,直到代码执行完毕)
3-8译码器
3-8译码器是一种2n译码器,其功能是 把二进制编码的3位数经过译码变为8路输 出,一次只有一个输出为选通有效。
表1 输入
A1 A2 A3 S1 S2 S3 S4 S5 S6 S7 S7
3-8译码器器真值表 输出
0
来自百度文库
0
0
1
0
0
0
0
0
0
0
0
0 0 1 1 1 1
0
1 1 0 0 1 1
1
/******************************************\
mux4_1.v参考设计(3)
\******************************************/
module mux4_1(a,b,c,d,sel,dout); input a,b,c,d; input [1:0] sel; output dout; wire dout;
/******************************************\ adder.v参考设计(2) \******************************************/
module adder( a1, a2, b, c ); input a1,a2; output b; output c; wire b,c; assign {c,b}=a1+a2; endmodule
编码器(encode)
考虑设计一个8位输入、3位输出的优先级编 码器,如图所示,为了使用上的方便,还要 考虑到如果输入是无效的,则输出为高阻态。 其中D0~D7表示编码器8位输出的高低电平, A2~A0表示3位二进制代码,并规定用X表 示输入为任意状态,用Z表示输出为高阻态。
always@(a or b or cin) begin {count,sum}=a + b + cin; end endmodule 位放在count中
两位全加器设计
译码器(decode)
译码器是组合逻辑电路的一个重要 器件,一般分为变量译码和显示译码 两类。变量译码通常是一种较少输入、 较多输出的器件,分为2n译码和 8421BCD码译码两类。 因为译码相信号之间是关联的,因 此译码器一般用case语句实现;
0 1 0 1 0 1
0
0 0 0 0 0 0
1
0 0 0 0 0 0
0
1 0 0 0 0 0
0
0 1 0 0 0 0
0
0 0 1 0 0 0
0
0 0 0 1 0 0
0
0 0 0 0 1 0
0
0 0 0 0 0 1
/******************************************\ dec3_8.v参考设计 \******************************************/
多路选择器(MUX)
用case语句实现多路选择器,一 般要求选择信号之间是关联的; Case的多路选择器一般是并行的 操作。
/******************************************\ mux4_1.v参考设计(1) \******************************************/ module mux4_1(a,b,c,d,sel,dout); input a,b,c,d; input [1:0] sel; output dout; reg dout;
module dec3_8(ain, dout); input [2:0] ain; output [7:0] dout; reg [7:0] dout;
always@(ain ) begin case(ain) 3’b000:dout=8’b0000_0001; 3’b001:dout=8’b0000_0010; 3’b010:dout=8’b0000_0100; 3’b011:dout=8’b0000_1000; 3’b100:dout=8’b0001_0000; 3’b101:dout=8’b0010_0000; 3’b110:dout=8’b0100_0000; 3’b111:dout=8’b1000_0000; default:dout=8’b0000_0000; endcase end endmodule
一位全加器
/*****************************************\ 一位全加器的数据流建模(1): \*****************************************/ module fa_adder(a,b,cin,sum,count) input a,b,cin; output sum,count; reg sum,count; Always块内赋值 reg t1,t2,t3; 必须定义为reg always@(a or b or cin) begin sum =(a^b)^cin; t1= a & cin; t2= b & cin; Begin和end之间 t3= a & b; 语句是顺序执行 count=(t1|t2)|t3; end endmodule
相关文档
最新文档