4.1 實驗目的
????????1.熟悉龍芯實驗開發(fā)板、熟悉 VIVADO 的編譯環(huán)境及操作流程。
????????2.掌握 FPGA 編程入門知識、利用門級方法實現(xiàn)簡單邏輯電路。
????????3.繼續(xù)學習 Verilog HDL 語法、掌握跑馬燈的設(shè)計、熟悉調(diào)試過程。
4.2 實驗原理及芯片
????????本次實驗用 Verilog HDL 語言來描述 6 個不同的 2 輸入邏輯門電路,其中包括:與、或、與非、或非、異或和同或門,并給出仿真測試代碼和約束文件代碼,可通過仿真波形圖和龍芯實驗板卡驗證其功能,同時完成跑馬燈(點亮實驗臺上 16 個 led 燈)實驗。門電路是數(shù)字電路中最基本的元件,它能實現(xiàn)最基本的邏輯功能。
4.3 實驗內(nèi)容
????????1.FPGA 編程使用入門,在 VIVADO 環(huán)境下完成對簡單電路工作情況的仿真模擬,掌握基本流程。
????????2.利用 Verilog 編程實現(xiàn)基本邏輯門電路,完成配置程序的下載,并在實驗臺上對程序進行最終驗證。
????????3.點亮實驗臺上 16 個 led 燈。
????????4.利用 Verilog 編程實現(xiàn)組合邏輯功能,實現(xiàn)跑馬燈的設(shè)計 (例如:1 秒鐘流水顯示)。
4.4 實驗步驟
????????4.4.1 輸入邏輯門電路驗證
????????邏輯關(guān)系文件:
module gates2 (
input a,
input b,
output [5:0] y
);
assign y[0] = a & b; //與
assign y[1] = a |b; //或
assign y[2] = ~(a & b); //與非
assign y[3] =~(a | b); //或非
assign y[4] = a ^ b; //異或
assign y[5] = a ~^ b; //同或
endmodule
????????仿真文件:
module gates2_test (
);
reg a,b;
wire [5:0] y;
gates2 test_gates2(a,b,y);
initial begin
a = 0; b =0; #100; //時間常量,#100 表示延遲 100 個時間單位
a=0; b =1; #100;
a = 1; b =0; #100;
a = 1; b =1; #100;
end
endmodule
?????????實驗具體步驟與對應關(guān)系不再一一闡述(群文件里都有),在這只對比輸入邏輯門電路驗證結(jié)果。
????????仿真結(jié)果:
????????真值表:
4.4.2 跑馬燈實驗設(shè)計
????????邏輯關(guān)系文件:
module led_test (
input sys_clk,
input rst_n,
output reg [15:0] led
);
reg [31:0] timer;
reg [15:0] led_counter;
always @(posedge sys_clk or negedge rst_n) begin
if (~rst_n) begin
timer <= 32'd0;
led_counter <= 4'b0000;
end
else if (timer == 32'd199_999_999 )begin
timer <= 32'd0; // 計時器達到 4 秒(50M*4-1=199999999),清零計時器
led_counter <= led_counter +1'b1;
end
else
timer <= timer + 1'b1; // 計時器加一
end
always @(posedge sys_clk or negedge rst_n) begin
if (~rst_n)
led <= 16'b0000_0000_0000_0000; // 復位信號有效時,將 LED 清零
else begin
case (led_counter)
4'b0000: led <= 16'b0000_0000_0000_0001;
4'b0001: led <= 16'b0000_0000_0000_0011;
4'b0010: led <= 16'b0000_0000_0000_0111;
4'b0011: led <= 16'b0000_0000_0000_1111;
4'b0100: led <= 16'b0000_0000_0001_1111;
4'b0101: led <= 16'b0000_0000_0011_1111;
4'b0110: led <= 16'b0000_0000_0111_1111;
4'b0111: led <= 16'b0000_0000_1111_1111;
4'b1000: led <= 16'b0000_0001_1111_1111;
4'b1001: led <= 16'b0000_0011_1111_1111;
4'b1010: led <= 16'b0000_0111_1111_1111;
4'b1011: led <= 16'b0000_1111_1111_1111;
4'b1100: led <= 16'b0001_1111_1111_1111;
4'b1101: led <= 16'b0011_1111_1111_1111;
4'b1110: led <= 16'b0111_1111_1111_1111;
4'b1111: led <= 16'b1111_1111_1111_1111;
default: led <= 16'b0000_0000_0000_0000;
endcase
end
end
endmodule
????????實驗思路:
????????本次實驗要實現(xiàn)跑馬燈的效果,設(shè)置一個計時器(timer)和一個LED計數(shù)器(led_counter)。計時器每個時鐘周期加一,直到達到4秒(199,999,999個時鐘周期),然后計時器清零,并且LED計數(shù)器加一。
????????在第一個always塊中,根據(jù)時鐘信號和復位信號來控制計時器和LED計數(shù)器的行為。當復位信號有效時,計時器和LED都被清零。當計時器達到4秒時,計時器清零并且LED計數(shù)器加一。其他情況下,計時器繼續(xù)加一。
????????在第二個always塊中,根據(jù)LED計數(shù)器的值來設(shè)置LED的輸出。根據(jù)LED計數(shù)器的不同值,LED的輸出會依次從1到全亮(16位二進制數(shù))。整個模塊的功能是實現(xiàn)一個LED計時器,每4秒LED的亮度逐漸增加,最后達到全亮狀態(tài)。
????????實驗結(jié)果:
?
5 實驗總結(jié)與反思
????????兩次實驗中,第一次驗證輸入邏輯門電路較為簡單,由于有老師提供的代碼,自己理解起來也比較容易,按照實驗步驟的指導一步步做下來,自己也是順利的完成了第一次實驗。文章來源:http://www.zghlxwxcb.cn/news/detail-763766.html
????????在第二次實驗中,由于沒有老師提供的代碼,在自己的摸索下,自己寫出了一個跟同學不一樣的跑馬燈代碼,通過設(shè)置一個計時器(timer)和一個LED計數(shù)器(led_counter)來實現(xiàn)跑馬燈的效果,通過此次實驗,自己也發(fā)現(xiàn)對Verilog HDL的理解還是不夠熟悉,只停留在課本方面,沒有運用到實際中,這讓我看到了自己的差距,在下步的實驗中,我將在課下繼續(xù)努力,熟練掌握Verilog HDL語言。文章來源地址http://www.zghlxwxcb.cn/news/detail-763766.html
到了這里,關(guān)于跑馬燈實驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!