一、實(shí)驗(yàn)?zāi)繕?biāo)
能夠熟練的進(jìn)行可編程邏輯器件開發(fā),能夠通過具體工程需求進(jìn)行需求分析、模塊劃分、代碼編寫、功能仿真、綜合分析、板級驗(yàn)證,能夠獨(dú)立正確的進(jìn)行實(shí)驗(yàn)操作,培養(yǎng)學(xué)生的工程實(shí)踐研究能力和動(dòng)手實(shí)踐能力,具備借助可編程邏輯器件開發(fā)平臺和仿真工具科學(xué)的獲取實(shí)驗(yàn)數(shù)據(jù)或?qū)嶒?yàn)現(xiàn)象,并能夠?qū)Σ杉降臄?shù)據(jù)或?qū)嶒?yàn)現(xiàn)象進(jìn)行合理的分析與解釋的能力。
二、實(shí)驗(yàn)內(nèi)容
數(shù)碼管成本低廉、穩(wěn)定性好、容易控制,在汽車電子中具有廣泛的應(yīng)用,例如汽車儀表盤、顯示屏等。本實(shí)驗(yàn)是一個(gè)汽車數(shù)碼管顯示系統(tǒng)設(shè)計(jì),模擬汽車儀表盤各類數(shù)據(jù)的數(shù)碼管顯示。
三、實(shí)驗(yàn)要求
1、 使用 FPGA 開發(fā)工具 Quartus II 及仿真工具 Modelsim 打開對應(yīng)工程,記錄工程占用資源,說明仿真信號波形與硬件對應(yīng)關(guān)系或作用;
2、 說明數(shù)碼管動(dòng)態(tài)掃描顯示原理;
3、 分析八段式數(shù)碼管顯示原理及 0-9 數(shù)字顯示對應(yīng)關(guān)系;
4、 將給定的程序上板驗(yàn)證,驗(yàn)證是否正確,并描述正確實(shí)驗(yàn)現(xiàn)象。
四、實(shí)驗(yàn)預(yù)習(xí)(實(shí)驗(yàn)原理、整體設(shè)計(jì)方案等)
(一)、實(shí)驗(yàn)基本原理:
本次實(shí)驗(yàn)是設(shè)計(jì)一個(gè)汽車數(shù)碼管顯示系統(tǒng),其基本設(shè)計(jì)原理為:通過控制MINI_FPGA開發(fā)板上配有的6個(gè)七段數(shù)碼管 DIG1-DIG6(當(dāng)正放 MINI_FPGA 開發(fā)板時(shí),從左至右依次數(shù)過去)模擬顯示汽車儀表盤上的各類數(shù)據(jù)。具體為先設(shè)置數(shù)碼管的動(dòng)態(tài)掃描周期,然后產(chǎn)生片選信號,再對片選信號進(jìn)行譯碼使得6個(gè)數(shù)碼管中所需的對應(yīng)數(shù)碼管啟用,最后通過由Testbench設(shè)計(jì)的對應(yīng)輸入信號,在對應(yīng)的數(shù)碼管上顯示出對應(yīng)的數(shù)字。
(二)、整體設(shè)計(jì)方案:
1.啟用所需的數(shù)碼管
先確定控制動(dòng)態(tài)掃描的周期為:Timex =8'd200 ,然后通過Count變量重復(fù)在動(dòng)態(tài)掃描周期內(nèi)重復(fù)計(jì)數(shù)、清零產(chǎn)生片選信號cs(由于本次實(shí)驗(yàn)僅啟用了兩個(gè)數(shù)碼管,所以cs的值在0和1之間變換),再將片選信號進(jìn)行譯碼,使得所需的對應(yīng)數(shù)碼管啟用,由此完成數(shù)碼管的啟用。
2.數(shù)碼管顯示對應(yīng)的數(shù)字
首先將待顯示的數(shù)據(jù)變量SingleNum初始化為零,然后通過片選信號的不斷變化,控制由Testbench上的測試文件數(shù)據(jù)賦給待顯示的數(shù)據(jù)變量SingleNum,再將待顯示的數(shù)據(jù)變量SingleNum譯碼成共陰極數(shù)碼管驅(qū)動(dòng)格式,使得啟用的數(shù)碼管顯示出對應(yīng)的數(shù)字。
五、測試驗(yàn)證(仿真、硬件測試)
仿真測試文件:

仿真結(jié)果圖:

通過將仿真文件與仿真結(jié)果可以看到,當(dāng)按鍵RST_N為0時(shí)(按鍵復(fù)位時(shí)),數(shù)碼管啟動(dòng)信號DigitronCS_Out<= 6'd0 (所有數(shù)碼管均不啟用),且待顯示數(shù)也初始化為0,同時(shí)測試文件設(shè)計(jì)的復(fù)位時(shí)間1ns與仿真結(jié)果圖上現(xiàn)實(shí)的結(jié)果一致。
當(dāng)按鍵RST_N為1時(shí),在由仿真文件輸入數(shù)據(jù)為Result = 8'h23 期間,對應(yīng)的數(shù)碼管DigitronCS_Out <= 6'b11_1110(十位)顯示為Digitron_Out<= N_3(數(shù)字3);對應(yīng)的數(shù)碼管DigitronCS_Out<= 6'b11_1101(個(gè)位)顯示為Digitron_Out <= N_5(數(shù)字5),時(shí)測試文件設(shè)計(jì)的Result = 8'h23時(shí)間區(qū)間10ns,兩個(gè)數(shù)碼管各自掃描一次的時(shí)間4ns與仿真結(jié)果圖上現(xiàn)實(shí)的結(jié)果一致,測試文件與仿真結(jié)果完全一致,實(shí)驗(yàn)仿真成功。
六、實(shí)驗(yàn)小結(jié)
本次實(shí)驗(yàn)是通過控制MINI_FPGA開發(fā)板上配有的6個(gè)七段數(shù)碼管 DIG1-DIG6模擬顯示汽車儀表盤上的各類數(shù)據(jù)。我在本次實(shí)驗(yàn)課程中懂得了Quartus以及modelsim軟件的基本使用,能夠創(chuàng)建新的項(xiàng)目文件,同時(shí)也可以利用modelsim軟件進(jìn)行仿真。也學(xué)會了如何編寫實(shí)驗(yàn)?zāi)愦a以及測試文件,充分了解到了實(shí)驗(yàn)代碼編寫的基本結(jié)構(gòu),以及一些常用的數(shù)據(jù)類型,同時(shí)也了解到了測試代碼的基本結(jié)構(gòu),以及測試代碼的功能作用,并且能夠編寫簡單的測試代碼用于實(shí)驗(yàn)代碼的測試。
我對于實(shí)驗(yàn)設(shè)計(jì)的過程也有了進(jìn)一步的了解,能夠仿照著寫出一些功能簡單的代碼,諸如基于本次實(shí)驗(yàn)使得相應(yīng)的數(shù)字在數(shù)碼管上顯示,我可以在這個(gè)功能的基礎(chǔ)上添加按鍵功能,使得測試代碼能夠上板進(jìn)行測試,通過按一個(gè)按鍵,使得數(shù)碼管顯示一個(gè)特別的數(shù)字或者符號。
本次的實(shí)驗(yàn)雖然簡單,但是也是重要的基礎(chǔ),F(xiàn)PGA的很多項(xiàng)目中都需要利用數(shù)碼管進(jìn)行顯示,用于上板測試代碼是否符合自己的需求或者是顯示出需要的數(shù)字符號給他人看。所有的學(xué)習(xí)都需要從基礎(chǔ)開始,正所謂“萬丈高樓平地起”,只要努力去學(xué)習(xí)提高自己,我們終會有所提高、有所進(jìn)步。
七、實(shí)驗(yàn)代碼
module sy1(
CLK ,
RST_N ,
Result ,
Digitron_Out ,
DigitronCS_Out
);
input CLK ;//外部時(shí)鐘50M
input RST_N ;//復(fù)位信號
input [7:0]Result ;//輸入待顯示數(shù)據(jù)
output [7:0]Digitron_Out ;//數(shù)碼管譯碼顯示數(shù)據(jù)
output [5:0]DigitronCS_Out;//數(shù)碼管片選
//------------信號類型申明+中間變量------------
reg [7:0]Digitron_Out ;
reg [5:0]DigitronCS_Out;
reg [7:0]Count ;//控制動(dòng)態(tài)掃描周期
reg [3:0]SingleNum ;//待顯示數(shù)據(jù)
reg [2:0]cs ;//片選相關(guān)中間信號
parameter Timex = 8'd200 ;//控制動(dòng)態(tài)掃描周期
parameter CS_NUM= 3'd2 ;//需要用到的數(shù)碼管個(gè)數(shù)
parameter N_0 = 8'b0011_1111, N_1 = 8'b0000_0110, N_2 = 8'b0101_1011,
N_3 = 8'b0100_1111, N_4 = 8'b0110_0110, N_5 = 8'b0110_1101,
N_6 = 8'b0111_1101, N_7 = 8'b0000_0111, N_8 = 8'b0111_1111,
N_9 = 8'b0110_1111;
//-----設(shè)置動(dòng)態(tài)掃描周期-------------------
always @( posedge CLK )
begin
if(!RST_N)
Count <= 8'd0 ;
else if(Count == Timex)
Count <= 8'd0 ;
else
Count <= Count + 8'd1 ;
end
//---根據(jù)掃描周期產(chǎn)生片選信號----------
always @ ( posedge CLK )
begin
if(!RST_N)
cs <= 3'd0 ;
else if(Count == Timex)
begin
if(cs == CS_NUM - 3'd1)
cs <= 3'd0 ;
else
cs <= cs + 3'd1 ;
end
end
//------結(jié)合電路將片選信號譯碼---------
always @ ( posedge CLK )
begin
if(!RST_N)
DigitronCS_Out <= 6'd0 ;
else
begin
case(cs)
3'd0: DigitronCS_Out <= 6'b11_1110;
3'd1: DigitronCS_Out <= 6'b11_1101;
3'd2: DigitronCS_Out <= 6'b11_1011;
3'd3: DigitronCS_Out <= 6'b11_0111;
3'd4: DigitronCS_Out <= 6'b10_1111;
3'd5: DigitronCS_Out <= 6'b01_1111;
default: DigitronCS_Out <= 6'b11_1111;
endcase
end
end
//---------根據(jù)輸入將待顯示分配到個(gè)位、十位----------------
always @ ( posedge CLK )
begin
if(!RST_N)
SingleNum <= 4'd0 ;
else
begin
case(cs)
3'd0: SingleNum <= Result[3:0];//個(gè)位
3'd1: SingleNum <= Result[7:4];//十位
default: SingleNum <= 4'd0;
endcase
end
end
//---待顯示數(shù)據(jù)譯碼成共陰極數(shù)碼管驅(qū)動(dòng)格式-------
always @( posedge CLK )
begin
if(!RST_N)
Digitron_Out <= 8'd0 ;
else
begin
case(SingleNum)
4'd0: Digitron_Out <= N_0;//個(gè)位
4'd1: Digitron_Out <= N_1;//十位
4'd2: Digitron_Out <= N_2;//個(gè)位
4'd3: Digitron_Out <= N_3;//十位
4'd4: Digitron_Out <= N_4;//個(gè)位
4'd5: Digitron_Out <= N_5;//十位
4'd6: Digitron_Out <= N_6;//個(gè)位
4'd7: Digitron_Out <= N_7;//十位
4'd8: Digitron_Out <= N_8;//個(gè)位
4'd9: Digitron_Out <= N_9;//十位
default: Digitron_Out <= 8'd0;
endcase
end
end
endmodule
八、測試文件
// Copyright (C) 1991-2013 Altera Corporation
// Your use of Altera Corporation's design tools, logic functions
// and other software and tools, and its AMPP partner logic
// functions, and any output files from any of the foregoing
// (including device programming or simulation files), and any
// associated documentation or information are expressly subject
// to the terms and conditions of the Altera Program License
// Subscription Agreement, Altera MegaCore Function License
// Agreement, or other applicable license agreement, including,
// without limitation, that your use is for the sole purpose of
// programming logic devices manufactured by Altera and sold by
// Altera or its authorized distributors. Please refer to the
// applicable agreement for further details.
// *****************************************************************************
// This file contains a Verilog test bench template that is freely editable to
// suit user's needs .Comments are provided in each section to help the user
// fill out necessary details.
// *****************************************************************************
// Generated on "04/08/2022 11:33:50"
// Verilog Test Bench template for design : sy1
//
// Simulation tool : ModelSim-Altera (Verilog)
//
`timescale 1 ps/ 1 ps
module sy1_vlg_tst();
// constants
// general purpose registers
//reg eachvec;
// test vector input registers
reg CLK;
reg RST_N;
reg [7:0] Result;
// wires
wire [5:0] DigitronCS_Out;
wire [7:0] Digitron_Out;
// assign statements (if any)
sy1 i1 (
// port map - connection between master ports and signals/registers
.CLK(CLK),
.DigitronCS_Out(DigitronCS_Out),
.Digitron_Out(Digitron_Out),
.RST_N(RST_N),
.Result(Result)
);
initial
begin
CLK = 0 ;
RST_N = 0 ;
Result = 8'h12 ;
#1000;
RST_N = 1 ;
Result = 8'h23 ;
#10000;
Result = 8'h48 ;
#10000;
Result = 8'h51 ;
#10000;
Result = 8'h64 ;
#10000;
Result = 8'h73 ;
#10000;
Result = 8'h26 ;
#10000;
$stop;
end
always #10 CLK = ~CLK ; 文章來源:http://www.zghlxwxcb.cn/news/detail-785708.html
endmodule文章來源地址http://www.zghlxwxcb.cn/news/detail-785708.html
到了這里,關(guān)于可編程邏輯器件之?dāng)?shù)碼管顯示實(shí)驗(yàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!