有心情就趕緊多寫幾篇
根據(jù)我的學(xué)習(xí)習(xí)慣呢,總要先簡(jiǎn)單的搞個(gè)好玩的HelloWorld之流簡(jiǎn)單項(xiàng)目撑毛,先體驗(yàn)一把,有個(gè)整體的感性認(rèn)識(shí)唧领,然后開始系統(tǒng)學(xué)習(xí)藻雌。
?其實(shí)吧,我實(shí)在是想不起來我當(dāng)初上手玩的是樣的小練手了斩个,但是我覺得流水燈應(yīng)該是做過了胯杭,從51單片機(jī),到430受啥,到STM32做个,到ARM,到FPGA腔呜,我想流水燈應(yīng)該是可以作為硬件界的HelloWorld吧叁温。
那我們就開始流水燈吧!
?當(dāng)然我們做的流水燈不會(huì)這么高級(jí)的核畴,可以說是一個(gè)簡(jiǎn)單的序列生成器膝但,生成如下序列
時(shí)鐘周期 | 序列 |
---|---|
0 | 0000_0001 |
1 | 0000_0010 |
2 | 0000_0100 |
3 | 0000_1000 |
4 | 0001_0000 |
5 | 0010_0000 |
6 | 0100_0000 |
7 | 1000_0000 |
?反應(yīng)在波形上就應(yīng)該是這樣的,上升沿我們作為時(shí)鐘的有效沿谤草,每次上升沿到來的時(shí)候波形變化跟束。理想情況如下圖,這幅圖就是功能仿真時(shí)序圖丑孩。
?注意LEDs這一行(最后一行)冀宴,序列是按照我們預(yù)想的方式變化,那么下面我們看這樣子功能該如何描述成電路
注意:這里我使用【描述】温学,不適用【編程】略贮,算是邏輯設(shè)計(jì)人員的小潔癖吧,我不喜歡稱之為編程,雖然也沒什么問題逃延。后面再解釋為什么要使用描述這個(gè)詞吧
代碼
module top( // 定義一個(gè)名稱為top的模塊
input clk, // 定義一個(gè)輸入端口览妖,用來輸入時(shí)鐘
input rst, // 定義一個(gè)輸入端口,用來輸入復(fù)位
output reg [7:0]led // 定義一組輸出總線揽祥,用來輸出LED燈的序列讽膏,0:滅,1:亮
);
// 下面這個(gè)叫做 always塊拄丰,描述了一組邏輯
always@(posedge clk)begin
if(rst)
led <= 8'b0000_0001; // 復(fù)位情況下輸出
else
led <= {led[6:0],led[7]}; // 循環(huán)向左移位
end
endmodule // 所有代碼必須組成一個(gè)module府树,用module/endmodule包含
就這么簡(jiǎn)單!
就這么簡(jiǎn)單!
就這么簡(jiǎn)單!
電路
?既然使用了【描述】,那么我們看一下這段代碼出來的電路時(shí)什么樣的料按。你可以將之理解為編譯的結(jié)果奄侠,只是在邏輯里頭,我們稱之為綜合Synthesis载矿,綜合的結(jié)果成為網(wǎng)表netlist
?關(guān)于【描述】這個(gè)詞:這段代碼就是用一種HDL(硬件描述語言)的規(guī)則來描述了這堆電路遭铺,所以我們稱之為描述。