西电verilog第九章范例.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例9.4-2: Verilog HDL串行语句块中并行化描述语句。 (1)代码1。 module paralle1(clk,in1,in2,in3,in4,out); input clk,in1,in2,in3,in4; output out; reg d1,d2,out; always @(posedgeclk) begin d1=in1in2; d2=in3d1; out=in4|d2; end endmodule (2)代码2。 module paralle1(clk,in1,in2,in3,in4,out); input clk,in1,in2,in3,in4; output out; reg d1,d2,out; always @(posedgeclk) begin out=in4|d2; d2=in3d1; d1=in1in2; end endmodule 9.5 非阻塞赋值语句和流水线设计 (a)无流水线 (b)穿插一级流水线 图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,in4_b; output [8:0] out; reg [8:0]out; reg [6:0] mult1,mult2,mult3,mult4; reg [7:0]adder1,adder2; always@(posedgeclk) begin multi1=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; end endmodule (2)穿插两级流水线。 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,in4_b; output [8:0] out; reg [8:0]out; reg [6:0]mult1,mult2,mult3,mult4; reg [7:0]adder1,adder2; always@(posedgeclk) begin multi1=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; end endmodule 9.6 循环语句在可综合设计中的使用 module count32(clk,q); input clk; output [4:0] q; reg [4:0]q; always @(posedge clk) for(q=0;q32;) q=q+1; endmodule Verilog HDL语言在可综合设计时建议不使用循环赋值语句。但是,是不是所有循环语句都是不可综合的? 果希望用循环次数作为信号,是不可以综合的;如果循环次数仅是一个用来标识的变量,没有信号的这个概念,那么是可以综合的。 module shift8_right(clk,shift_in,shift_out); input clk,shift_in; output shift_out; reg [7:0]q; integer i: assign shift_out =q[0] always @(posedge clk) begin for(i=0;i7;i++) q[i]=q[i+1]; q[7]=shift_in; end endmodule 例9.6-1:循环语句设计模32计数器(错误程序)。 例9.6-2:循环语句设计8bits右移位寄存器。 9.7 时间优先级的概念 9.7.1 if语句和case语句的优先级 module singl

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档