VerilogHDL那些事兒_模組化篇(黑金FPGA開發闆配套教程)
作者:akuei2
說明:參照該書将部分程式驗證學習一遍
學習時間:2014年5月2号
主要收獲:
1.對FPGA有初步了解;
2.功能子產品和控制子產品;
3.并行操作的思維;
4.使用“并行操作”進行流水燈實驗。
FPGA是什麼?
1.一個很好的比喻是:FPGA是“一堆樂高積木”,而Verilog是“搭積木的手”。FPGA并沒有實際的形狀,要通過Verilog描述出形狀來。
2.新手們常常忽略了,FPGA其實是并存着“順序操作”和“并行操作”的操作概念。如果打從一開始就忽略了它們,往後的日子很難避免遇見瓶頸。
過程指派和assign連續指派:
1.過程指派改變一個寄存器的狀态,是時序邏輯,用在initial和always裡面;
2.連續指派是組合邏輯,驅動線型變量(wire)。
流水燈實驗:
1.系統整體子產品以及每個功能子產品示意圖:
2.RTL原理圖
RTL(寄存器傳輸級):描述資料在寄存器之間怎麼流動和如何處理這些資料的模型。
3.控制子產品為top_module,功能子產品有led1_module~led4_module。
moduletop_module(CLK, RSTn, LED_Out);
input CLK;
input RSTn;
output [3:0]LED_Out;
wire LED1_Out;
led1_module U1
(
.CLK(CLK),
.RSTn(RSTn),
.LED_Out(LED1_Out)
);
wire LED2_Out;
led2_module U2
(
.CLK(CLK),
.RSTn(RSTn),
.LED_Out(LED2_Out)
);
wire LED3_Out;
led3_module U3
(
.CLK(CLK),
.RSTn(RSTn),
.LED_Out(LED3_Out)
);
wire LED4_Out;
led4_module U4
(
.CLK(CLK),
.RSTn(RSTn),
.LED_Out(LED4_Out)
);
assign LED_Out = {LED4_Out, LED3_Out,LED2_Out, LED1_Out};
endmodule
moduleled1_module(CLK, RSTn, LED_Out);
input CLK;
input RSTn;
output LED_Out;
parameter T10MS = 2'd3;
reg[1:0]Count1;
[email protected](posedge CLK or negedge RSTn)
if(!RSTn)
Count1 <= 2'd0;
else if(Count1 == T10MS)
Count1 <= 2'd0;
else
Count1 <= Count1 + 1'b1;
reg rLED_Out;
[email protected](posedge CLK or negedge RSTn)
if(!RSTn)
rLED_Out <= 1'b0;
else if(Count1 == 2'd0)
rLED_Out <= 1'b1;
else
rLED_Out <= 1'b0;
assign LED_Out = rLED_Out;
endmodule
4.仿真如下:
知識點~~~
1.硬體描述語言 Hardware DescriptionLanguage;
2.HDL采用自頂向下的電路設計方法,主要可以分為五個抽象層次:
3.HDL語言是有時序概念的,這和平常的程式設計語言不一樣。