西电verilog课件第九章_第1页
西电verilog课件第九章_第2页
西电verilog课件第九章_第3页
西电verilog课件第九章_第4页
西电verilog课件第九章_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第9章章 Verilog HDL设计风格设计风格12/22/20211Microelectronics School Xidian University 9.1 wire类型和类型和reg类型的使用类型的使用12/22/20212Microelectronics School Xidian University 在程序设计中如何正确使用在程序设计中如何正确使用wire和和reg类型,可以遵循以下几点:类型,可以遵循以下几点:(1)在连续赋值语句(assign)中,因为是对于组合电路的描述,被赋值信号只能使用wire类型;(2)在initial和always过程语句中,被赋值信号必须定义为re

2、g类型;(3)当采用结构级描述时,模块、基本门和开关元器件的输出信号只能使用wire类型;(4)模块端口输入输出信号默认为wire类型,如果输出信号是reg类型的话,需要重新定义reg类型。12/22/20213Microelectronics School Xidian University 例例9.1-1:连续赋值语句中的数据类型定义。:连续赋值语句中的数据类型定义。module xor_t1(in1,in2,in3,out1);input in1,in2,in3;output out1;assign out1=in1in2in3;endmodule例例9.1-2:过程赋值语句中的时:过程

3、赋值语句中的时序电路数据类型定义。序电路数据类型定义。module DFF_t1(d,clk,q);inputd,clk;output q;reg q;always (posedgeclk) q=d;endmodule例例9.1-3:过程赋值语句中的组合电:过程赋值语句中的组合电路数据类型定义。路数据类型定义。module xor_t2(in1,in2,in3,out1);input in1,in2,in3;output out1;reg out1;always (in1,in2,in3) out1=in1in2in3;endmodule12/22/20214Microelectronics

4、School Xidian University 例例9.1-4:结构描述中信号数据类型的定义。:结构描述中信号数据类型的定义。module structure(in1,in2,in3,clk,out1);input in1,in2,in3,clk;output out1;wire q;DFF_t1 U1(in1,clk,q);xor_t2 U2(q,in2,in3,out1);endmodule12/22/20215Microelectronics School Xidian University 例例9.1-5:混合描述中信号数据类型定义。:混合描述中信号数据类型定义。module str

5、ucture(in1,in2,in3,clk,out1);input in1,in2,in3,clk;output out1;reg q;always (posedgeclk) q=in1; /DFF_t1 U1(in1,clk,q);xor_t2 U2(q,in2,in3,out1);endmodule例例9.1-6:门级结构描述中间产生信号类型定义。:门级结构描述中间产生信号类型定义。module xor_t3(in1,in2,in3,out1);input in1,in2,in3;output out1;xor U1(w1,in1,in2);xor U2(out1,w1,in3);end

6、module12/22/20216Microelectronics School Xidian University 例例9.1-7:寄存器型变量赋负值:寄存器型变量赋负值(1)直接赋值。module reg_test1;reg3:0a;reg7:0b; initial begin a=-1; /实际赋值为实际赋值为4b1111 b=-1; /实际赋值为实际赋值为16b11111111 $display(%b,a); $display(%b,b); end endmodule(2)采用补码赋值。module reg_test2;reg3:0a;reg7:0b; initial begin a=

7、4b1111; b=16b11111111; $display(%b,a); $display(%b,b); end endmodule9.2 连续赋值语句和运算符的使用连续赋值语句和运算符的使用12/22/20217Microelectronics School Xidian University 例例9.2-1: 设计一个设计一个8bits信号的奇偶校验电路。信号的奇偶校验电路。(1)过程语句描述module odd_even_check_always(a,a_odd,a_even);input 3:0 a;output a_odd,a_even;reg a_add,a_even;alwa

8、ys(a) begina_odd=a7a6a5a4a3a2a1a0;a_even=a7a6a5a4a3a2a1a0;endendmodule(2)连续赋值语句描述module odd_even_check_assign(a,a_odd,a_even);input 3:0 a;output a_odd,a_even;assign a_odd= a;assign a_even=a_odd;endmodule12/22/20218Microelectronics School Xidian University module sel2to1_always(sel,a,b,c);input 7:0 a

9、,b;input sel;output 7:0 c;reg 7:0 c;always (sel,a,b)if(sel) c=a;else c=b;endmodulemodule sel2to1_assign(sel,a,b,c);input 7:0 a,b;input sel;output 7:0 c;assign c=sel?a,b;endmodule例例9.2-2:设计根据:设计根据sel控制信号对控制信号对2个个8bits信号进行选择电路。信号进行选择电路。(1)过程语句描述。)过程语句描述。(2)连续赋值语句描述。)连续赋值语句描述。连续赋值语句和运算符的使用连续赋值语句和运算符的使用

10、对于组合电路,采用连续赋值语句和运算符是完全可以进行设计的。但是在一些特殊环境下,采用过程语句效率更好一些。一个典型的例子是case条件分支语句对于真值表和有限状态机的描述,采用case语句会合理一些。例例9.2-3:真值表程序设计。:真值表程序设计。abcout1out20001100101010010111010000101001101111110表表9.2-1 例例9.2-3真值表真值表mudule true_table(a,b,c,out1,out2);inputa,b,c;output out1,out2;reg out1,out2;always (a,b,c)case(a,b,c)

11、3b000: out1,out2=2b11;3b001: out1,out2=2b01;3b010: out1,out2=2b01;3b011: out1,out2=2b10;3b100: out1,out2=2b00;3b101: out1,out2=2b00;3b110: out1,out2=2b11;3b111: out1,out2=2b10;endcaseendmodulemodule shift8_right(clk,shift_in,shift_out);inputclk,shift_in;outputshift_out;reg7:0q;assignshift_out=q0alwa

12、ys(posedgeclk)beginq0=q1;q1=q2;q2=q3;q3=q4;q4=q5;q5=q6;q6=q7;q7=shift_in;endendmodulemodule shift8_right(clk,shift_in,shift_out);inputclk,shift_in;outputshift_out;reg7:0q;assign shift_out=q0;always(posedgeclk) q=in,q7:1;endmodule例例9.2-4:设计一个:设计一个8bits右移移位寄存器。右移移位寄存器。(1)代码1(2)代码2。9.3 always语句中敏感事件表在时

13、序电路中的使用语句中敏感事件表在时序电路中的使用12/22/202111Microelectronics School Xidian University 在敏感事件列表是Verilog HDL语言中的一个关键性要素,如何选取敏感事件作为过程的触发事件,在Verilog HDL程序中有一定的设计要求:(1)采用过程语句对组合电路进行描述时,需要把全部的输入信号列入敏感信号列表,且敏感信号列表不允许存在边沿信号。(2)采用过程语句对时序电路进行描述时,需要把时间信号和部分输入信号列入敏感信号列表。例例9.3-1:Verilog HDL用用always语句描语句描述述4选选1数据选择器。数据选择器

14、。module mux4_1(out,in0,in1,in2,in3,sel);input in0,in1,in2,in3;output out;input 1:0sel;reg out; always (in0 or in1 or in2 or in3 or sel) /敏感信敏感信号列表号列表case(sel)2b00: out=in0;2b01: out=in1;2b10: out=in2;2b11: out=in3;default: out=2bx; endcaseendmodule9.3 always语句中敏感事件表在时序电路中的使用语句中敏感事件表在时序电路中的使用很多综合工具(如

15、Quartus II)不允许边沿变化信号和电平变化信号同时出现在敏感事件表中。例如always (posedge clk , negedge rst ) 是正确的,可以被综合。是正确的,可以被综合。always (posedge clk , rst ) 是错误的,不可以被综合。是错误的,不可以被综合。module and_DFF1(clk,a,b,and_out);input clk,a,b;output and_out;always (poesdge clk) and_out=a&b;endmodule例例9.3-2:分析:分析Verilog HDL程序。程序。module and_

16、DFF1(clk,a,b,and_out);inputclk,a,b;outputand_out;rega_d1,b_d1;always(poesdge clk) begina_d1=a;b_d1=b;endassignand_out=a_d1&b_d1;endmodule例例9.3-3:图:图9.3-2电路电路Verilog HDL程序。程序。module and_DFF1(clk,a,b,and_out);inputclk,a,b;outputand_out;rega_d1;always(poesdge clk) a_d1=a;assignand_out=a_d1&b;en

17、dmodule例例9.3-4:图:图9.3-3电路电路Verilog HDL程序。程序。9.4 Verilog HDL程序并行化设计思想程序并行化设计思想在Verilog HDL语言中,电路结构描述方式、数据流描述方式和行为级描述方式是完全并行的,直接体现在程序设计代码中。module papralle(clk,in1,in2,in3,out);input clk,in1,in2;output out;wire and1;reg d;and U1(and1,in1,in2);always(posedgeclk)d=and1;assign out=and1|in3;endmodulemodule

18、 papralle(clk,in1,in2,in3,out);input clk,in1,in2;output out;wire and1;reg d;assign out=and1|in3;and U1(and1,in1,in2);always(posedgeclk)d=and1;endmodule例例9.4-1: Verilog HDL并行化描述语句。并行化描述语句。(2)代码2。(1)代码1。例例9.4-2: Verilog HDL串行语句块中并行化描述语句。串行语句块中并行化描述语句。(1)代码1。module paralle1(clk,in1,in2,in3,in4,out);inp

19、ut clk,in1,in2,in3,in4;output out;reg d1,d2,out;always (posedgeclk)begind1=in1&in2;d2=in3&d1;out=in4|d2;endendmodule(2)代码2。module paralle1(clk,in1,in2,in3,in4,out);input clk,in1,in2,in3,in4;output out;reg d1,d2,out;always (posedgeclk)beginout=in4|d2;d2=in3&d1;d1=in1&in2;endendmodule9

20、.5 非阻塞赋值语句和流水线设计非阻塞赋值语句和流水线设计 (a a)无流水线)无流水线 (b b)穿插一级流水线)穿插一级流水线 图图9.5-1 9.5-1 流水线穿插示意图流水线穿插示意图(a)时序)时序 (b)时序)时序图图9.5-2 流水线时序示意图流水线时序示意图例例9.5-1:乘加器电路。:乘加器电路。(1)无流水线。module muti_add(clk,in1_a,in1_b,in2_a,in2_b,in3_a,in3_b,in4_a,in4_b,out);input clk;input 3:0 in1_a,in1_b,in2_a,in2_b,in3_a,in3_b,in4_a

21、,in4_b;output 8:0 out;reg 8:0out;reg 6:0 mult1,mult2,mult3,mult4;reg 7:0adder1,adder2;always(posedgeclk)beginmulti1=in1_a*in1_b;multi2=in2_a*in2_b;multi3=in3_a*in3_b;multi4=in4_a*in4_b;adder1= multi1+multi2;adder2= multi3+multi4;out=adder1+adder2;endendmodule(2)穿插两级流水线。module muti_add(clk,in1_a,in1_

22、b,in2_a,in2_b,in3_a,in3_b,in4_a,in4_b,out);input clk;input 3:0 in1_a,in1_b,in2_a,in2_b,in3_a,in3_b,in4_a,in4_b;output 8:0 out;reg 8:0out;reg 6:0mult1,mult2,mult3,mult4;reg 7:0adder1,adder2;always(posedgeclk)beginmulti1=in1_a*in1_b;multi2=in2_a*in2_b;multi3=in3_a*in3_b;multi4=in4_a*in4_b;adder1= mult

23、i1+multi2;adder2= multi3+multi4;out=adder1+adder2;endendmodule9.6 循环语句在可综合设计中的使用循环语句在可综合设计中的使用module count32(clk,q);input clk;output 4:0 q;reg 4:0q;always (posedge clk)for(q=0;q32;) q=q+1;endmoduleVerilog HDL语言在可综合设计时建议不使用循环赋值语句。但是,是不是所有循环语句语言在可综合设计时建议不使用循环赋值语句。但是,是不是所有循环语句都是不可综合的?都是不可综合的?果希望用循环次数作为

24、信号,是不可以综合的;如果循环次数仅是一个用来标识的变量,没有信号的这个概念,那么是可以综合的。module shift8_right(clk,shift_in,shift_out);input clk,shift_in;output shift_out;reg 7:0q;integer i:assign shift_out =q0always (posedge clk)beginfor(i=0;i7;i+) qi=qi+1;q7=shift_in;endendmodule例例9.6-1:循环语句设计模:循环语句设计模32计数器计数器(错误程序)。(错误程序)。例例9.6-2:循环语句设计:循

25、环语句设计8bits右移位寄存器。右移位寄存器。9.7 时间优先级的概念时间优先级的概念 9.7.1 if语句和语句和case语句的优先级语句的优先级module single_if(a, b, c, d, sel, z);input a, b, c, d;input 3:0 sel;output z;reg z;always (a or b or c or d or sel)beginif (sel3) z = d;else if (sel2) z = c;else if (sel1) z = b;else if (sel0) z = a;else z = 0;endendmodulemod

26、ule mult_if(a, b, c, d, sel, z);input a, b, c, d;input 3:0 sel;output z;reg z;always (a or b or c or d or sel)begin z = 0;if (sel0) z = a;if (sel1) z = b;if (sel2) z = c;if (sel3) z = d;endendmodule例例9.7-1:if语句的优先级。语句的优先级。(1)if-else语句的嵌套。(2)串行的if语句module case1(a, b, c, d, sel, z);input a, b, c, d;in

27、put 3:0 sel;output z;reg z;always (a or b or c or d or sel)begincasex (sel) 4b1xxx: z = d; 4bx1xx: z = c; 4bxx1x: z = b; 4bxxx1: z = a;default: z = 1b0;endcaseendendmodule例例9.7-2:case语句的优先级。语句的优先级。9.7.2 晚到达信号处理晚到达信号处理module single_if(a, b, c, d, sel, z);input a, b, c, d;input 3:0 sel;output z;reg z;

28、always (a or b or c or d or sel)beginif (sel1 & (sel2|sel3) z = b_is_late;else if (sel3) z = d;else if (sel2) z = c; else if (sel0) z = a;else z = 0;endendmodule module mult_if_improved(a, b_is_late, c, d, sel, z);input a, b_is_late, c, d;input 3:0 sel;output z;reg z, z1;always (a or b_is_late o

29、r c or d or sel) begin z1 = 0;if (sel0) z1 = a;if (sel2) z1 = c;if (sel3) z1 = d;if (sel1 & (sel2|sel3)z = b_is_late;else z = z1;endendmodul例例9.7-3: if结构的优先级结构的优先级代码(代码(1)代码(代码(2)9.7.3重组逻辑结构提高电路平衡性重组逻辑结构提高电路平衡性例例9.7-4:线性结构的归约:线性结构的归约XOR运算。运算。module xor1(data_in,data_out);input data_in;output dat

30、a_out;wire 4:0data_in;assign data_out=data_in;endmodule例例9.7-5:平衡树形结构的归约:平衡树形结构的归约XOR运算。运算。module xor2(data_in,data_out);input data_in;output data_out;wire 4:0data_in; assign data_out=data_in0(data_in1data_in2)(data_in3data_in4);endmodule9.8 逻辑重复和资源共享逻辑重复和资源共享9.8.1 逻辑重复逻辑重复例例9.8-1是一个地址计算电路,其计算模型是:是一

31、个地址计算电路,其计算模型是:COUNT=B+(ADDRESS-8b00000000,BASE-CONTROL?PTR1:PTR2)module BEFORE (ADDRESS, PTR1, PTR2, B, CONTROL, COUNT);input 7:0 PTR1,PTR2;input 15:0 ADDRESS, B;input CONTROL; / CONTROL is late arrivingoutput 15:0 COUNT;parameter 7:0 BASE = 8b10000000;wire 7:0 PTR, OFFSET;wire 15:0 ADDR;assign PTR

32、 = (CONTROL = 1b1) ? PTR1 : PTR2;assign OFFSET = BASE - PTR; assign ADDR = ADDRESS - 8h00, OFFSET;assign COUNT = ADDR + B;endmodule例例9.8-1:先选择再运算结构。:先选择再运算结构。module PRECOMPUTED (ADDRESS, PTR1, PTR2, B, CONTROL, COUNT);input 7:0 PTR1, PTR2;input 15:0 ADDRESS, B;input CONTROL;output 15:0 COUNT;parameter 7:0 BASE = 8b10000000;wire 7:0 OFFSET1,OFFSET2;wire 15:0 ADDR1,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论