天天看點

Verilog之流水燈

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.系統整體子產品以及每個功能子產品示意圖:

Verilog之流水燈
Verilog之流水燈

2.RTL原理圖

RTL(寄存器傳輸級):描述資料在寄存器之間怎麼流動和如何處理這些資料的模型。

Verilog之流水燈

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.仿真如下:

Verilog之流水燈

知識點~~~

1.硬體描述語言 Hardware DescriptionLanguage;

2.HDL采用自頂向下的電路設計方法,主要可以分為五個抽象層次:

Verilog之流水燈

3.HDL語言是有時序概念的,這和平常的程式設計語言不一樣。