常见组合逻辑电路

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else outcode=3‟bzzz;
权最高?哪一个最低?
end endmodule
MAX+PLUSII编译后的生成的模块符号:
4、数据选择器(2选1、4选1)(略) 5、奇偶校验位产生器
module parity(even,odd,bus); input [7:0] bus;
output even,odd;

assign F2=(B&C&D); assign F=F1|F2;
input A,B,C,D; output F;
reg F; always @(A or B or C or D) F=~(A&B)|(B&C&D); endmodule //always过程语句
2、三态门的描述
(1)调用内置门元件描述 bufif1 b1(out,in,en); (2)用assign连续赋值语句描述 assign out=en ? in: ’bz;
else if(!SET) q<=1’B1;
else case({J,K}) 2’b00: Q<=Q; 2’b01:Q<=1’b0; 2’b10:Q<=1’b1; 2’b11:Q<=~Q; endcase
(3)用过程语句always块描述
reg out; begin always @(en or in) out=en ? in: ’bz; end
※在Verilog HDL中,描述简单的组合逻 辑通常使用assign结构。
注意:条件运算符是一种在组合逻辑实 现分支判断时常使用的格式。
(二)复杂组合电路的描述
always @(a or b)
begin outcome=0;
for(i=1;i≤size;i=i+1)
if(b[i]) outcome=outcome+(a<<(i-1)); end endmodule
练习:采用Verilog HDL case 语句对半加器进行行为描述 module halfadder(A,B,S,C); input A,B; output S,C; reg S,C; always @(A or B) begin case ({A,B}) 2'B00: {S,C}=2'B00; 2'B01: {S,C}=2'B10; 2'B10: {S,C}=2'B10; 2'B11: {S,C}=2'B01; endcase end endmodule


在一个模块中,使用initial和always语句的次数是不受限制的,它 们都是同时开始运行的。
行为描述

“always”或“initial”过程块构成了行为级建模的基础,即所有行为级语句 只能出现在这两种块之中。 只有实例元件和“assign”连续赋值语句可以独立在块外。 行为级描述时如果分支条件比较少,且有先后顺序,选择if-else语句; 如果条件分支比较多,使用case(casez、casex)语句更加方便。 循环语句有4种(for、 repeat、 while 、forever),建议首选for语句。
assign odd=^bus ; //缩位运算产生奇校验位 assign even=~odd;
endmodule //产生偶校验位
module voter7(pass,vote); output pass; 6、程序如左所示,说出 input[6:0] vote; for 语句的执行过程,说 reg[2:0] sum; 明该电路的功能 integer i; reg pass; (vote[6] or vote[5] or vote[4] or always @(vote) vote[3] or vote[2] or vote[1] or vote[0] ) begin sum=0; 3’b000 for(i=0;i<=6;i=i+1) if(vote[i]) sum=sum+1; 循环体 if(sum[2]) pass=1; //i=7时这条语句得到执行,判断sum是否大于等于4 else pass=0; end 电路功能:7人多数表决器 endmodule
源自文库
2、BCD码—— 七段数码显示 译码器
MAX+PLUSII编译后的生成的模块符号:
module encoder8_3(outcode,a,b,c,d,e,f,g,h); output[2:0] outcode; input a,b,c,d,e,f,g,h; reg[2:0] outcode; always @(a or b or c or d or e or f or g or h) begin 3、8 if(h) outcode=3‟b111; 线-3 线优 else if(g) outcode=3‟b110; 先编 else if(f) outcode=3‟b101; 码器 else if(e) outcode=3‟b100; else if(d) outcode=3‟b011; 要求:输入高电平 else if(c) outcode=3‟b010; 有效,输出为原码, else if(b) outcode=3‟b001; 哪一个输入的优先 else if(a) outcode=3‟b000;
module mult_for(outcome,a,b); 7、 说 明 该 电 路 的 功 能
parameter size=8;
input[size:1] a,b; output [2*size:1] outcome; reg [2*size:1] outcome; integer i; 功 能 : 两 个 八 位 数 相 乘
※一般用 always块实现 较复杂的组合 逻辑电路
module decoder_38(out,in); output[7:0] out; input [2:0] in; reg[7:0]out; always @(in) begin case(in) 3’b000:out=8’b11111110; 3’b001:out=8’b11111101; 3’b010:out=8’b11111011; 3’b011:out=8’b11110111; 3’b100:out=8’b11101111; 3’b101:out=8’b11011111; 3’b110:out=8’b10111111; 3’b111:out=8’b01111111; endcase end endmodule


(3)用“always”或“initial”过程块。 (行为描述)
使用initial和always的区别

“always”块既可用于描述组合逻辑,也可描述时序逻辑。 always语句是不断地重复活动的,直到仿真过程结束。但always语 句后的过程块是否运行,则要看它的触发条件是否满足,如满足则 运行过程块一次,再次满足则再运行一次,直至仿真过程结束。 “initial”块一般用于变量初始化及仿真波形产生。 Initial语句只执行一次。 一个模块中这三种表达方式是并发执行的,有多个实例元件、 “assign”声明语句、“always”块也是并发执行的。但“always”块 内是顺序执行的。
module JK_FF(CLK,J,K,Q,RS,SET); input CLK,J,K,SET,RS; output Q;
reg Q;
always @(posedge CLK or negedge RS or negedge SET ) begin if(!RS) Q<=1’B0; 异步置数、异步清零 异步清零,低电平有效
三、常用时序电路模块设计
(一) 简单时序逻辑电路的描述
基本D触发器
module DFF(Q,D,CLK); output Q;
※通常使用 always @(posedge clk) 或 @(negedge clk)块来描述时 序逻辑。
input D,CLK;
reg Q; always @(posedge CLK)
endmodule (2)用assign连续赋值语句描述 module gate1(F,A,B,C,D);
input A,B,C,D;output F; assign F=(~(A&B))|(B&C&D); endmodule (3)用过程语句always块描述 module gate2(F,A,B,C,D); //连续赋值语句 assign F1=~(A&B);
0:33:15
第三部分 Verilog HDL 语言
主要内容:
一、 初识Verilog HDL
二、 Verilog HDL 基础 三、Verilog HDL 行为语句 四、Verilog HDL设计风格 五、常见组合与时序逻辑电路Verilog HDL描述
常见组合与时序逻辑电路Verilog HDL描述
用 Verilog HDL描述电路模块小结 常用组合电路模块的设计
常用时序电路模块的设计
一、用 Verilog HDL描述电路模块小结

模块中最重要的部分是逻辑功能定义部分。
有3种方法可在模块中产生逻辑功能:
(1)用实例元件:内置门元件、开关元件、自行设计生成的元件。(结 构描述) 如:and #2 ul(q,a,b) 端口信号名称可以采用位置关联方法和名称关联方法进行连接。 (2)用“assign”声明语句连续赋值。(数据流描述) 采用“assign”语句是描述组合逻辑电路最常用的方法之一。
1、3线-8 线译码器
MAX+PLUSII编译后的生成的模块符号:
2
module decode4_7(a,b,c,d,e,f,g,D3,D2,D1,D0); output a,b,c,d,e,f,g; input D3,D2,D1,D0; reg a,b,c,d,e,f,g; always @(D3 or D2 or D1 or D0) begin case({D3,D2,D1,D0}) 4‟d0:{a,b,c,d,e,f,g}=7‟b1111110; 4‟d1:{a,b,c,d,e,f,g}=7‟b0110000; 4‟d2:{a,b,c,d,e,f,g}=7‟b1101101; 4‟d3:{a,b,c,d,e,f,g}=7‟b1111001; 4‟d4:{a,b,c,d,e,f,g}=7‟b0110011; 4‟d5:{a,b,c,d,e,f,g}=7‟b1011011; 4‟d6:{a,b,c,d,e,f,g}=7‟b1011111; 4‟d7:{a,b,c,d,e,f,g}=7‟b1110000; 4‟d8:{a,b,c,d,e,f,g}=7‟b1111111; 4‟d9:{a,b,c,d,e,f,g}=7‟b1111011; default:{a,b,c,d,e,f,g}=7’bz; endcase end endmodule

二、常用组合电路模块的设计

组合逻辑电路在数字系统中起着基本组件的作用。

组合逻辑电路包括:门电路、双向三态门、加法器、 多路选择器、比较器、乘法器、总线等。
(一)简单组合电路的描述
1、基本门电路的描述
(1)调用内置门元件描述
module gate3(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); //调用内置门
同步置数,低电平有效.优先级低 同步清零,低电平有效.优先级高 or negedge set or negedge reset
异步置数或异步清零?
else if(!set)
begin
end
q=1; qn=0; end
else begin q<=d; qn<=~d; end
endmodule
2、带清零端、置1端的JK触发器
Q<=D;
endmodule
上升沿有效的边沿结构的D触发器
(二) 复杂时序逻辑电路的描述
※通常在always 过程语句里使用条件语句 来实现较复杂的时序逻辑电路 。
1、带清零端、置1端的D触发器
module DFF1(q,qn,d,clk,set,reset); output q,qn; input d,clk,set,reset; reg q,qn; always @(posedge clk ) begin if(!reset) begin q=0; qn=1; end
相关文档
最新文档