1. 程式人生 > 實用技巧 >(未完成)Verilog相關課件

(未完成)Verilog相關課件

參考書:

《Verilog HDL數字積體電路高階程式設計》蔡覺平,西安電子科技大學出版社 2015
《Verilog HDL 高階數字設計》電子工業出版社,Michael D. Ciletti著,張雅綺譯,2008年.6
《Verilog HDL數字設計與綜合》電子工業出版社,Samir Palnitkar,夏宇聞等譯,2009.8
《VERILOG數字系統設計--RTL綜合.測試平臺與驗證》電子工業出版社, Zainalabedin Navabi,李廣軍等譯,2007
《硬體描述語言Verilog》 清華大學出版社,Thomas &Moorby,劉明業等譯,2001.8

01.很多綜合工具(如Quartus II)不允許邊沿變化訊號和電平變化訊號

同時出現在敏感事件表中。例如

always @(posedge clk , negedge rst ) //是正確的,可以被綜合。
always @(posedge clk , rst )         //是錯誤的,不可以被綜合。

02.流水線設計圖示:

03.流水線設計例項:

乘加器電路(無流水線):

程式碼:

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

乘加器電路改進(流水線):

程式碼:

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

04.