《verilog设计初步与入门》由会员分享,可在线阅读,更多相关《verilog设计初步与入门(45页珍藏版)》请在金锄头文库上搜索。
1、可编程逻辑器件与EDA,第四讲 Verilog设计入门,4.1 组合电路的Verilog描述,4.1.1 2选1多路选择器及其Verilog描述,4.1.1 2选1多路选择器及其Verilog描述,4.1 组合电路的Verilog描述,1模块表达,2端口语句、端口信号名和端口模式,4.1 组合电路的Verilog描述,4.1.1 2选1多路选择器及其Verilog描述,module MUX21a(a,b,s,y); input a,b,s; output y; assign y=(s? a:b); endmodule,3赋值语句和条件操作符,4关键字,5标识符,6规范的程序书写格式,7文件取名
2、和存盘,4.1 组合电路的Verilog描述,4.1.1 2选1多路选择器及其Verilog描述,module MUX21a(a,b,s,y); input a,b,s; output y; assign y=(s? a:b); endmodule,4.1.2 4选1多路选择器及其case语句表述方式,4.1 组合电路的Verilog描述,module MUX41a(a,b,c,d,s1,s0,y); input a,b,c,d; input s1,s0; output y; reg y; always (a,b,c,d,s1,s0) begin case (s1,s0) 2b00 : y=a
3、; 2b01 : y=b; 2b10 : y=c; 2b11 : y=d; default: y=a; endcase end endmodule,4.1.2 4选1多路选择器及其case语句表述方式,4.1 组合电路的Verilog描述,1reg型变量定义,4.1 组合电路的Verilog描述,4.1.2 4选1多路选择器及其case语句表述方式,(1)Verilog中最常用的两种变量:寄存器型和网线型,(2)模块中涉及的信息必须定义其类型;,(3)默认的变量类型为网线型(wire);,(4)过程语句中被赋值的变量必须为寄存器型;,选择正确的数据类型,module top; wire y;
4、reg a, b; DUT u1 (y, a, b) ; initial begin a = 0; b = 0; #5 a = 1; end endmodule,module DUT (Y, A, B); output Y; input A, B; wire Y, A, B; and (Y, A, B) ; endmodule,输入端口可以由net/register驱动,但输入端口只能是net,输出端口可以是net/register类型,输出端口只能驱动net,在过程块中只能给register类型赋值,若Y,A,B说明为reg则会产生错误。,in1,in2,O,A,B,Y,双向端口输入/输出只
5、能是net类型,4.1 组合电路的Verilog描述,2过程语句,4.1 组合电路的Verilog描述,4.1.2 4选1多路选择器及其case语句表述方式,(1)可用 or 连接所有敏感信号;,(2)可用 逗号(,)区分或连接所有敏感信号;,(3)可用通配符 * 省略形式给出所有敏感信息;,注:试图通过选择性地列出敏感信号来改变逻辑设计是无效的。,3块语句begin_ end,4case条件语句和4种逻辑状态,4.1 组合电路的Verilog描述,4.1.2 4选1多路选择器及其case语句表述方式,case语句使用事项:,case语句是测试表达式与另外一系列表达式分支是否匹配的一个多路条件
6、语句。,Case语句进行逐位比较以求完全匹配(包括x和z)。 Default语句可选,在没有任何条件成立时执行。此时如果未说明default,Verilog不执行任何动作。 多个default语句是非法的。,重要内容: 使用default语句是一个很好的编程习惯,特别是用于检测x和z。 Casez和casex为case语句的变体,允许比较无关(dont-care)值。 case表达式或case项中的任何位为无关值时,在比较过程中该位不予考虑。 在casez语句中,? 和 z 被当作无关值。 在casex语句中,?,z 和 x 被当作无关值。,case , :赋值语句或空语句; , :赋值语句或
7、空语句; default:赋值语句或空语句;,case语法:,4.1 组合电路的Verilog描述,5并位操作和数字表达,4.1 组合电路的Verilog描述,4.1.2 4选1多路选择器及其case语句表述方式,(1)B 二进制;O:八进制;H:十六进制;D:十进制。(不区分大小),(2)Verilog中只要标明了数制才能确定其二进制位数;,(3)Verilog-2001可定义有符号二进制数;(4b1010与4sb1010为不同),4.1.3 4选1多路选择器及其数据流描述方式,4.1 组合电路的Verilog描述,1按位逻辑操作符,4.1 组合电路的Verilog描述,4.1.3 4选1多
8、路选择器及其数据流描述方式,2等式操作符,3assign连续赋值语句,4.1 组合电路的Verilog描述,4.1.3 4选1多路选择器及其数据流描述方式,注:assign连续赋值语句中不允许有不同的数据赋给同一变量;(如下将出现错误)。,4wire定义网线型变量,4.1 组合电路的Verilog描述,4.1.3 4选1多路选择器及其数据流描述方式,(1)用wire定义的网线型变量可以在任何类型的表达式或赋值语句中用作输入信号;,4.1 组合电路的Verilog描述,4.1.3 4选1多路选择器及其数据流描述方式,module MUX41a(a,b,c,d,s1,s0,y); input a,
9、b,c,d; input s1,s0; output y; wire AT=s0? d:c; wire BT=s0? a:b; wire y=s1? AT:BT; endmodule,用wire定义描述4选1语句,4.1.4 4选1多路选择器及其if语句描述方式,4.1 组合电路的Verilog描述,1if_ else条件语句,2过程赋值语句,(1)阻塞式赋值,(2)非阻塞式赋值,4.1 组合电路的Verilog描述,4.1.4 4选1多路选择器及其if语句描述方式,module MUX41a(a,b,c,d,s1,s0,y); input a,b,c,d; input s1,s0; outp
10、ut y; reg1:0 SEL; reg y; always (a,b,c,d,SEL) begin SEL=s1,s0; if(SEL=0) y=a; else if(SEL=1) y=b; else if(SEL=2) y=c; else y=d; end endmodule,用=作为阻塞式赋值语句;,执行完毕立即更新数据;,多条阻塞语句将阻塞后面语句;,用=作为非阻塞式赋值语句;,在块语句执行完毕后才更新数据;,其他语句处于并行执行;,4.1.5 加法器及其Verilog描述,1. 半加器描述,4.1 组合电路的Verilog描述,4.1 组合电路的Verilog描述,4.1.5 加法
11、器及其Verilog描述,module h_adder(a,b,so,co); input a,b; output so,co; assign so=ab; assign co=a endmodule,1. 半加器描述,1. 半加器描述,4.1 组合电路的Verilog描述,4.1.5 加法器及其Verilog描述,module h_adder(a,b,so,co); input a,b; output so,co; reg so,co; always (a,b) begin case (a,b) 0: begin so=0;co=1b0; end/使用块语句 1: begin so=1;co
12、=1b0; end 2: begin so=1;co=1b0; end 3: begin so=0;co=1b1; end default: begin so=0;co=1b0; end endcase end endmodule,1. 半加器描述,4.1 组合电路的Verilog描述,4.1.5 加法器及其Verilog描述,module h_adder(a,b,so,co); input a,b; output so,co; assign co,so=a+b; endmodule,2. 全加器描述,4.1 组合电路的Verilog描述,4.1.5 加法器及其Verilog描述,2. 全加器
13、顶层文件设计和例化语句,4.1 组合电路的Verilog描述,4.1.5 加法器及其Verilog描述,module f_adder(ain,bin,cin,cout,sum); input ain,bin,cin; output cout,sum; wire e,d,f; h_adder u1(ain,bin,e,d); /位置关联 h_adder u2(.a(e),.so(sum),.b(cin),.co(f);/端口关联 or2a u3(.a(d),.b(f),.c(cout); endmodule,2. 全加器顶层文件设计和例化语句,4.1 组合电路的Verilog描述,4.1.5 加
14、法器及其Verilog描述,h_adder u1(ain,bin,e,d); /位置关联,h_adder u2(.a(e),.so(sum),.b(cin),.co(f);/端口关联,or2a u3(.a(d),.b(f),.c(cout);,4. 8位加法器描述,4.1 组合电路的Verilog描述,4.1.5 加法器及其Verilog描述,module ADDER8B(A,B,CIN,COUT,DOUT); input 7:0 A,B; input CIN; output 7:0 DOUT; output COUT; wire 8:0 DATA; assign DATA=A+B+CIN;
15、assign COUT=DATA8; assign DOUT=DATA7:0; endmodule,module ADDER8B(A,B,CIN,COUT,DOUT); input 7:0 A,B; input CIN; output 7:0 DOUT; output COUT; assign COUT,DOUT=A+B+CIN; endmodule,3. 8位加法器描述,4.1 组合电路的Verilog描述,4.1.5 加法器及其Verilog描述,4.2 时序模块及其Verilog表述,4.2.1 边沿触发型触发器及其Verilog表述,module DFF1(CLK,D,Q); inpu
16、t CLK,D; output Q; reg Q; always (posedge CLK) Q=D; endmodule,4.2.2 电平触发型锁存器及其Verilog表述,4.2 时序模块及其Verilog表述,module LATCH1(CLK,D,Q); input CLK,D; output Q; reg Q; always (D,CLK) if(CLK) Q=D; else Q=Q; endmodule,4.2.3 含异步复位/时钟使能型触发器及其Verilog表述,4.2 时序模块及其Verilog表述,module DFF2(CLK,D,Q,RST,EN); input CLK,D,RST,EN; output Q; reg Q; always (posedge CLK,negedge RST) begin if(!RST) Q=0; else if(EN) Q=D; end end