0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FPGA的數(shù)碼管靜態(tài)顯示

CHANBAEK ? 來(lái)源:小小研究生 ? 作者:xxyjs2020 ? 2023-07-28 10:03 ? 次閱讀

設(shè)計(jì)規(guī)劃

設(shè)計(jì)一個(gè)8位數(shù)碼管靜態(tài)顯示:采用共陽(yáng)極(低電平點(diǎn)亮)8段數(shù)碼管,控制八位數(shù)碼管讓其以00000000、11111111、22222222一直到FFFFFFFF循環(huán)顯示。每個(gè)字符顯示0.5s。

硬件資源

數(shù)碼管

常見(jiàn)數(shù)碼管分為七段或八段,八段是多一個(gè)小數(shù)點(diǎn)。也可分為共陰極或共陽(yáng)極,觀察下面的原理圖,共陰極數(shù)碼管對(duì)應(yīng)端口為高電平時(shí)對(duì)應(yīng)二極管點(diǎn)亮,共陽(yáng)極則相反。

圖片

段式數(shù)碼管工作方式有兩種:靜態(tài)顯示和動(dòng)態(tài)顯示。靜態(tài)顯示是指將8個(gè)數(shù)碼管的段選信號(hào)連接在一起,就可以顯示相同的數(shù)字。每個(gè)數(shù)碼管的段選必須接一個(gè)8位數(shù)據(jù)線來(lái)顯示字形,顯示字形可一直保持,直到送入新字形碼為止。如果每個(gè)數(shù)碼管都接8位段選數(shù)據(jù)線,那么8個(gè)數(shù)碼管就需要64根數(shù)據(jù)線。(例如8個(gè)數(shù)碼管都顯示0,那么每個(gè)數(shù)碼管都要接一個(gè)8位的段選數(shù)據(jù)線,且控制段選信號(hào)為1100_0000)這樣占用的I/O接口太多。如下圖所示,我們將8個(gè)數(shù)碼管的段選信號(hào)連接在一起,由位選信號(hào)去控制,每一個(gè)數(shù)碼管上都有一個(gè)位選信號(hào)。那么在同一時(shí)刻8個(gè)數(shù)碼管顯示的字符都一樣了。(例如8個(gè)數(shù)碼管都顯示0,那么8位位選信號(hào)為1111_1111,這樣才能控制8個(gè)共陽(yáng)數(shù)碼管都能點(diǎn)亮。段選信號(hào)是連接在一起的,當(dāng)它為1100_0000時(shí),8個(gè)數(shù)碼管都顯示0)

圖片

即使這樣控制數(shù)碼管仍然需要使用16個(gè)I/O口資源。如果想要節(jié)省I/O口,可以通過(guò)74HC595芯片(位移緩存器)來(lái)實(shí)現(xiàn)。

74HC595芯片

圖片

圖片

圖片

使用一個(gè)串行輸入口就可以并行輸出八個(gè)輸入的串行數(shù)據(jù)。但是一片芯片只能并行輸出8位數(shù)據(jù),但是8個(gè)數(shù)碼管需要16位數(shù)據(jù)線,因此需要級(jí)聯(lián)兩片74HC595芯片進(jìn)行輸出:將Q7S引腳接入下一片的DS引腳,這樣我們最少使用3個(gè)I/O口就可以控制多片芯片了。

10號(hào)引腳是主復(fù)位,低電平有效將移位寄存器的數(shù)據(jù)清零,通常接到Vcc防止數(shù)據(jù)清零。SHCP為移位寄存器時(shí)鐘輸入,上升沿時(shí)將輸入的串行數(shù)據(jù)(DS端輸入)移入移位寄存器中。如果一次輸入的數(shù)據(jù)超過(guò)8bit,后面的數(shù)據(jù)會(huì)通過(guò)Q7S端口傳到下一級(jí)芯片的DS端口。74HC595內(nèi)部有一個(gè)8位 存儲(chǔ)寄存器 ,由STCP(存儲(chǔ)寄存器時(shí)鐘)控制,STCP上升沿時(shí)移位寄存器的數(shù)據(jù)會(huì)進(jìn)入數(shù)據(jù)存儲(chǔ)寄存器中,令第13引腳為低即可讓存儲(chǔ)寄存器中的數(shù)據(jù)進(jìn)行輸出。

總結(jié)一下使用步驟:

  1. 首先把要傳輸?shù)臄?shù)據(jù)通過(guò)引腳DS輸入到74HC595中。
  2. 產(chǎn)生SHCP時(shí)鐘,將DS上的數(shù)據(jù)串行移入移位寄存器。
  3. 產(chǎn)生STCP時(shí)鐘,將移位寄存器里的數(shù)據(jù)送入存儲(chǔ)寄存器。
  4. 將13引腳置為低電平,存儲(chǔ)寄存器的數(shù)據(jù)會(huì)在Q0-Q7并行輸出,同時(shí)并行輸出的數(shù)據(jù)會(huì)被鎖存起來(lái)。

圖片

AC620 開(kāi)發(fā)板上的數(shù)碼管采用串行移位寄存器芯片將串行數(shù)據(jù)轉(zhuǎn)化為 16 位并行數(shù)據(jù)后進(jìn)行驅(qū)動(dòng)。Cyclone IV E 通過(guò) 3 根數(shù)據(jù)線,連接到兩片級(jí)聯(lián)的串行移位器芯片 74HC595 上,再由 74HC595 將每次 16 位串行的數(shù)據(jù)轉(zhuǎn)化為 16 位并行的數(shù)據(jù),分別用以驅(qū)動(dòng)8 段 8 位數(shù)碼管的段選和位選。(用戶手冊(cè)是7段,但是有小數(shù)點(diǎn),這里統(tǒng)一稱為8段)

圖片

我們采用的是低電平點(diǎn)亮的共陽(yáng)極數(shù)碼管。首先看位選信號(hào),SEL[0]對(duì)應(yīng)開(kāi)發(fā)板最右側(cè)的數(shù)碼管,以此類(lèi)推。位選信號(hào)為1111_1111才能點(diǎn)亮數(shù)碼管。再看段選信號(hào),以顯示0為例,需要將abcdef點(diǎn)亮,按照左邊高位右邊低位的順序,dp、g、f、e、d、c、b、a就對(duì)應(yīng)1100_0000。0-F對(duì)應(yīng)(0)1100_0000、(1)1111_1001、(2)1010_0100、(3)1011_0000、(4)1001_1001、(5)1001_0010、(6)1000_0010、(7)1111_1000、(8)1000_0000、(9)1001_0000、(A)1000_1000、(B)1000_0011、(C)1100_0110、(D)1010_0001、(E)1000_0110、(F)1000_1110。

圖片

編寫(xiě)代碼

通過(guò)系統(tǒng)框圖可以看出,分為3個(gè)模塊:數(shù)碼管驅(qū)動(dòng)模塊,芯片控制模塊和數(shù)碼管顯示模塊。數(shù)碼管顯示模塊是 頂層模塊 ,實(shí)質(zhì)上完成兩個(gè)子模塊的實(shí)例化。上圖里整個(gè)系統(tǒng)連接方式是Cyclone IV E連接74HC595芯片連接數(shù)碼管。我們看數(shù)碼管驅(qū)動(dòng)和芯片控制這兩個(gè)子模塊,下圖中數(shù)碼管的引腳圖需要段選信號(hào)和位選信號(hào)去驅(qū)動(dòng),74HC595芯片,除了幾個(gè)常接高低電平的引腳外,它的輸入引腳是接Cyclone IV E的,輸出引腳是控制數(shù)碼管的。頂層模塊中只需要考慮芯片和Cyclone IV E之間的連線,因此頂層模塊的輸入是時(shí)鐘和復(fù)位信號(hào),輸出是芯片的輸入引腳:寄存器時(shí)鐘,存儲(chǔ)器時(shí)鐘,數(shù)據(jù)輸入。尤其要注意的是,因?yàn)槲矣玫拈_(kāi)發(fā)板沒(méi)有使能引腳,他不能作為輸出存在。我們?cè)賹㈨攲幽K拆分為數(shù)碼管驅(qū)動(dòng)模塊和芯片控制模塊。數(shù)碼管驅(qū)動(dòng)模塊考慮數(shù)碼管和芯片之間的連線,因此它的輸入是時(shí)鐘和復(fù)位信號(hào),輸出是段選和位選信號(hào)。芯片控制模塊考慮的是芯片和數(shù)碼管以及Cyclone IV E的連線,因此它的輸入是時(shí)鐘、復(fù)位、段選和位選信號(hào),使能信號(hào),輸出是芯片的輸入引腳(寄存器時(shí)鐘,存儲(chǔ)器時(shí)鐘,數(shù)據(jù)輸入)。理清楚了這些,就很容易編寫(xiě)代碼了。

圖片

圖片

圖片

1、數(shù)碼管驅(qū)動(dòng)模塊seg_static

圖片

圖片

包括輸入:時(shí)鐘信號(hào)、復(fù)位信號(hào),輸出:段選信號(hào)和位選信號(hào)。這個(gè)模塊最重要的是弄清楚怎么產(chǎn)生段選和位選信號(hào)。每隔0.5s,我們要實(shí)現(xiàn)00000000-FFFFFFFF的循環(huán)顯示,那么位選信號(hào)我們之前探討了必須為1111_1111才能使數(shù)碼管正常工作,而段選信號(hào)我們也探討了從0-F的段選信號(hào),就可以畫(huà)出波形圖。根據(jù)波形圖可以編寫(xiě)代碼。

圖片

我們需要三個(gè)中間信號(hào):計(jì)數(shù)器cnt_wait,標(biāo)志信號(hào)add_flag,顯示信號(hào)num。其中,cnt_wait從0計(jì)數(shù)到24999999即0.5s,每到計(jì)滿時(shí)標(biāo)志信號(hào)add_flag拉高,且顯示信號(hào)跳轉(zhuǎn)到下一個(gè)狀態(tài),顯示信號(hào)需要從0-F循環(huán)。

module seg_static
(
input wire sys_clk , 
input wire sys_rst_n , 


output reg [7:0] sel , 
output reg [7:0] seg 


);


 //parameter define
 parameter CNT_WAIT_MAX = 25'd24_999_999; //計(jì)數(shù)器最大值(0.5s)
 //十六進(jìn)制數(shù)顯示編碼
 parameter SEG_0 = 8'b1100_0000, SEG_1 = 8'b1111_1001,
 SEG_2 = 8'b1010_0100, SEG_3 = 8'b1011_0000,
 SEG_4 = 8'b1001_1001, SEG_5 = 8'b1001_0010,
 SEG_6 = 8'b1000_0010, SEG_7 = 8'b1111_1000,
 SEG_8 = 8'b1000_0000, SEG_9 = 8'b1001_0000,
 SEG_A = 8'b1000_1000, SEG_B = 8'b1000_0011,
 SEG_C = 8'b1100_0110, SEG_D = 8'b1010_0001,
 SEG_E = 8'b1000_0110, SEG_F = 8'b1000_1110;
 parameter IDLE = 8'b1111_1111; //不顯示狀態(tài)


 //reg define
 reg add_flag ; 
 reg [24:0] cnt_wait ; 
 reg [3:0] num ; 


 //cnt_wait:0.5秒計(jì)數(shù)
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt_wait <= 25'd0;
 else if(cnt_wait == CNT_WAIT_MAX)
 cnt_wait <= 25'd0;
 else
 cnt_wait <= cnt_wait + 1'b1;


 //add_flag:0.5s拉高一個(gè)標(biāo)志信號(hào)
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 add_flag <= 1'b0;
 else if(cnt_wait == CNT_WAIT_MAX - 1)
 add_flag <= 1'b1;
 else
 add_flag <= 1'b0;


 //num:從 4'h0 加到 4'hf 循環(huán)
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 num <= 4'd0;
 else if(add_flag == 1'b1)
 num <= num + 1'b1;
 else
 num <= num;


 //sel:選中8個(gè)數(shù)碼管
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 sel <= 8'b00000000;
 else
 sel <= 8'b11111111;


 //給要顯示的值編碼
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 seg <= IDLE;
 else case(num)
 4'd0: seg <= SEG_0;
 4'd1: seg <= SEG_1;
 4'd2: seg <= SEG_2;
 4'd3: seg <= SEG_3;
 4'd4: seg <= SEG_4;
 4'd5: seg <= SEG_5;
 4'd6: seg <= SEG_6;
 4'd7: seg <= SEG_7;
 4'd8: seg <= SEG_8;
 4'd9: seg <= SEG_9;
 4'd10: seg <= SEG_A;
 4'd11: seg <= SEG_B;
 4'd12: seg <= SEG_C;
 4'd13: seg <= SEG_D;
 4'd14: seg <= SEG_E;
 4'd15: seg <= SEG_F;
 default:seg <= IDLE ; //閑置狀態(tài),不顯示
 endcase


 endmodule

計(jì)數(shù)器cnt_wait:0.5s計(jì)數(shù)器,計(jì)數(shù)值從0-24_999_999。復(fù)位有效時(shí)歸0,計(jì)數(shù)到24_999_999計(jì)滿時(shí)歸0,其他情況+1。

標(biāo)志信號(hào)add_flag:計(jì)滿0.5s拉高一個(gè)脈沖,復(fù)位有效時(shí)歸0,計(jì)數(shù)到24_999_999-1時(shí)拉高,其他情況歸0。

顯示信號(hào)num:每當(dāng)標(biāo)志信號(hào)拉高時(shí)從0-F循環(huán),復(fù)位有效時(shí)歸0,判斷標(biāo)志信號(hào)為高電平時(shí)+1(F是1111,+1為10000溢出,但只保留后四位0000,因此F的下一個(gè)狀態(tài)還是0),其他情況保持原值。

位選信號(hào)sel:位選信號(hào)長(zhǎng)期接高點(diǎn)平,數(shù)碼管才能顯示,因此復(fù)位有效時(shí)歸0,其他情況都為高電平。

段選信號(hào)seg:段選信號(hào)與顯示數(shù)值的對(duì)應(yīng)關(guān)系之前已經(jīng)討論過(guò)了。除了0-F的16種顯示情況外增加了一種不顯示的閑置狀態(tài)IDLE。復(fù)位有效時(shí)段選信號(hào)為IDLE,與num數(shù)值有關(guān)。使用CASE語(yǔ)句判斷num值并將對(duì)應(yīng)的參數(shù)賦值給段選信號(hào)seg,注意要有default語(yǔ)句。

2、芯片控制模塊

圖片

圖片

包括輸入:時(shí)鐘信號(hào)、復(fù)位信號(hào),段選信號(hào),位選信號(hào),輸出使能,輸出:芯片的四個(gè)輸入引腳(寄存器時(shí)鐘,存儲(chǔ)器時(shí)鐘,數(shù)據(jù)輸入)。這個(gè)模塊最重要的是弄清楚怎么通過(guò)控制Cyclone IV E和芯片連接的引腳,讓芯片產(chǎn)生正確的輸出,去驅(qū)動(dòng)數(shù)碼管正確的顯示圖形。

圖片

注意:對(duì)于我使用的開(kāi)發(fā)板,沒(méi)有oe對(duì)應(yīng)引腳,它是作為輸入信號(hào)存在的(可閱讀https://blog.csdn.net/weixin_43614528/article/details/87878938?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%2287878938%22%2C%22source%22%3A%22unlogin%22%7D)74HC595驅(qū)動(dòng)模塊觀察其代碼。而對(duì)于征途開(kāi)發(fā)板,使能引腳為L(zhǎng)11。

圖片

shcp是寄存器時(shí)鐘,上升沿時(shí)數(shù)據(jù)寫(xiě)入移位寄存器,它有頻率限制,這里采用系統(tǒng)時(shí)鐘的4分頻,即12.5MHz。stcp是存儲(chǔ)器時(shí)鐘,串行輸入16位之后拉高。 en是使能信號(hào),需要一直維持高電平 (圖中的使能信號(hào)oe剛好相反,這與開(kāi)發(fā)板有關(guān),因此要仔細(xì)閱讀用戶手冊(cè))。

module hc595_ctrl
(
input wire sys_clk , 
input wire sys_rst_n , 
input wire [7:0] sel , 
input wire [7:0] seg , 
input wire en ,


output reg stcp , 
output reg shcp , 
output reg ds  


 );


 //reg define
 reg [1:0] cnt_4 ; //分頻計(jì)數(shù)器
 reg [3:0] cnt_bit ; //傳輸位數(shù)計(jì)數(shù)器


 //wire define
 wire [15:0] data ; //數(shù)碼管信號(hào)寄存


 //將數(shù)碼管信號(hào)寄存
 assign data={sel,seg[0],seg[1],seg[2],seg[3],seg[4],seg[5],seg[6],seg[7]};


 //分頻計(jì)數(shù)器:0~3循環(huán)計(jì)數(shù)
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt_4 <= 2'd0;
 else if(cnt_4 == 2'd3)
 cnt_4 <= 2'd0;
 else
 cnt_4 <= cnt_4 + 1'b1;


 //cnt_bit:每輸入一位數(shù)據(jù)加一
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt_bit <= 4'd0;
 else if(cnt_4 == 2'd3 && cnt_bit == 4'd15)
 cnt_bit <= 4'd0;
 else if(cnt_4 == 2'd3)
 cnt_bit <= cnt_bit + 1'b1;
 else
 cnt_bit <= cnt_bit;


 //stcp:14個(gè)信號(hào)傳輸完成之后產(chǎn)生一個(gè)上升沿
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 stcp <= 1'b0;
 else if(cnt_bit == 4'd15 && cnt_4 == 2'd3)
 stcp <= 1'b1;
 else
 stcp <= 1'b0;


 //shcp:產(chǎn)生四分頻移位時(shí)鐘
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 shcp <= 1'b0;
 else if(cnt_4 >= 4'd2)
 shcp <= 1'b1;
 else
 shcp <= 1'b0;


 //ds:將寄存器里存儲(chǔ)的數(shù)碼管信號(hào)輸入即
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 ds <= 1'b0;
 else if(cnt_4 == 2'd0)
 ds <= data[cnt_bit];
 else
 ds <= ds;


 endmodule

使能信號(hào)en:在這里沒(méi)有給他賦值,而在頂層模塊的實(shí)例化時(shí)接了高電平。

分頻計(jì)數(shù)器cnt_4:4分頻即0-3循環(huán)計(jì)數(shù),復(fù)位有效時(shí)歸0,計(jì)數(shù)到3計(jì)滿時(shí)歸0,其他情況+1。

傳輸位數(shù)計(jì)數(shù)器cnt_bit:每傳輸一個(gè)數(shù)據(jù)+1,0-15循環(huán)計(jì)數(shù)。由于分頻之后四個(gè)時(shí)鐘周期為一個(gè)新的時(shí)鐘周期,一個(gè)新時(shí)鐘周期傳輸一個(gè)數(shù)據(jù)。復(fù)位有效時(shí)歸0,當(dāng)cnt計(jì)數(shù)到3且cnt_bit計(jì)數(shù)到15計(jì)滿時(shí)歸0,cnt計(jì)數(shù)到3且cnt_bit沒(méi)計(jì)滿時(shí)+1,其他情況保持。

存儲(chǔ)器時(shí)鐘stcp:15個(gè)信號(hào)傳輸完成后拉高,復(fù)位有效時(shí)歸0,當(dāng)cnt計(jì)數(shù)到3且cnt_bit計(jì)數(shù)到15計(jì)滿時(shí)拉高,其他情況保持低電平。

寄存器時(shí)鐘shcp:第九節(jié)分頻器中僅分頻的分頻器實(shí)現(xiàn)方法,4分頻后的時(shí)鐘脈沖周期是原來(lái)的4倍。復(fù)位有效時(shí)歸0,計(jì)數(shù)大于等于2(2,3)時(shí)拉高,其他情況(0,1)拉低。

串行數(shù)據(jù)輸出ds:對(duì)FPGA芯片來(lái)說(shuō)是輸出,對(duì)74HC595芯片來(lái)說(shuō)是輸入。復(fù)位有效時(shí)歸0,當(dāng)分頻計(jì)數(shù)器計(jì)數(shù)值為0時(shí)開(kāi)始傳輸數(shù)據(jù),其他情況保持原值。傳輸?shù)臄?shù)據(jù)是FPGA芯片輸出的16位數(shù)據(jù),74HC595芯片會(huì)串行輸出(一次輸出1bit)。數(shù)據(jù)data是seg[0]...seg[7],sel拼接起來(lái)的,sel是從高位到低位的順序,data[cnt_bit]是從低位到高位的輸出,因此是從位選的低位到高位,再?gòu)亩芜x的高位到低位依次輸出。

3、頂層模塊

module seg_595_static
(
input wire sys_clk ,
input wire sys_rst_n , 


output wire stcp , 
output wire shcp , 
output wire ds 


 );


 //wire define
 wire [7:0] sel;
 wire [7:0] seg;


 //---------- seg_static_inst ----------
 seg_static seg_static_inst
 (
 .sys_clk (sys_clk ), 
 .sys_rst_n (sys_rst_n ), 


 .sel (sel ), 
 .seg (seg ) 
 );


 //---------- hc595_ctrl_inst ----------
 hc595_ctrl hc595_ctrl_inst
 (
 .sys_clk (sys_clk ), 
 .sys_rst_n (sys_rst_n), 
 .sel (sel ), 
 .seg (seg ), 
 .en(1'b1),


 .stcp (stcp ), 
 .shcp (shcp ), 
 .ds (ds )
 );


 endmodule

頂層模塊實(shí)質(zhì)是兩個(gè)實(shí)例化。

圖片

編寫(xiě)testbench

`timescale 1ns/1ns
module tb_seg_595_static();


//wire define
wire stcp ; //輸出數(shù)據(jù)存儲(chǔ)寄時(shí)鐘
 wire shcp ; //移位寄存器的時(shí)鐘輸入
 wire ds ; //串行數(shù)據(jù)輸入
 wire oe ; //輸出使能信號(hào)


 //reg define
 reg sys_clk ;
 reg sys_rst_n ;
 
 //對(duì)sys_clk,sys_rst_n賦初始值
 initial
 begin
 sys_clk = 1'b1;
 sys_rst_n <= 1'b0;
 #100
 sys_rst_n <= 1'b1;
 end


 //clk:產(chǎn)生時(shí)鐘
 always #10 sys_clk <= ~sys_clk;


 //重新定義參數(shù)值,縮短仿真時(shí)間
 defparam seg_595_static_inst.seg_static_inst.CNT_WAIT_MAX = 100;


 //-------------seg_595_static_inst-------------
 seg_595_static seg_595_static_inst(


 .sys_clk (sys_clk ), //系統(tǒng)時(shí)鐘,頻率50MHz
 .sys_rst_n (sys_rst_n ), //復(fù)位信號(hào),低電平有效


 .stcp (stcp ), //輸出數(shù)據(jù)存儲(chǔ)寄時(shí)鐘
 .shcp (shcp ), //移位寄存器的時(shí)鐘輸入
 .ds (ds ), //串行數(shù)據(jù)輸入
 .oe (oe ) //輸出使能信號(hào)
 );


 endmodule

初始化:對(duì)時(shí)鐘信號(hào)和復(fù)位信號(hào)賦初值,延遲100ns后復(fù)位拉高。

產(chǎn)生時(shí)鐘:延遲10ns后取反,周期為20ns,50MHz的時(shí)鐘。

為了節(jié)省仿真時(shí)間,重新定義參數(shù)。當(dāng)一個(gè)模塊引用另外一個(gè)模塊時(shí),高層模塊可以改變低層模塊用parameter定義的參數(shù)值。低層模塊的參數(shù)可以通過(guò)層次路徑名重新定義。

實(shí)例化

對(duì)比波形

數(shù)碼管靜態(tài)驅(qū)動(dòng)模塊仿真波形圖

這里看模塊的波形,可以把原來(lái)的波形delete,再把想要的如圖添加進(jìn)去。后面要修改可以restart后break再重新run all。

圖片

圖片

圖片

可以看到數(shù)碼顯示的值(num)從0開(kāi)始跳轉(zhuǎn)到了1,再跳轉(zhuǎn)到了2;同時(shí)段選信號(hào)(seg)的編碼與顯示的字符也相吻合

圖片

可以看到數(shù)碼管顯示的數(shù)值從4’hf跳轉(zhuǎn)回0

74HC595控制模塊仿真波形圖

圖片

分配管腳

圖片

圖片

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21736

    瀏覽量

    603419
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120375
  • 數(shù)碼管
    +關(guān)注

    關(guān)注

    32

    文章

    1882

    瀏覽量

    91124
  • 靜態(tài)顯示
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    6001
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)碼管靜態(tài)顯示原理

    數(shù)碼管顯示數(shù)碼管靜態(tài)顯示原理顯示器及其接口數(shù)碼管動(dòng)態(tài)
    發(fā)表于 11-22 08:38

    數(shù)碼管靜態(tài)顯示電路

    數(shù)碼管靜態(tài)顯示電路
    發(fā)表于 05-23 16:15 ?3764次閱讀
    <b class='flag-5'>數(shù)碼管</b><b class='flag-5'>靜態(tài)</b><b class='flag-5'>顯示</b>電路

    數(shù)碼管靜態(tài)顯示)【匯編版】

    數(shù)碼管靜態(tài)顯示)【匯編版】數(shù)碼管靜態(tài)顯示)【匯編版】數(shù)碼
    發(fā)表于 12-29 15:27 ?0次下載

    數(shù)碼管靜態(tài)顯示)【C語(yǔ)言版】

    數(shù)碼管靜態(tài)顯示)【C語(yǔ)言版】數(shù)碼管靜態(tài)顯示)【C語(yǔ)言版】
    發(fā)表于 12-29 15:27 ?0次下載

    靜態(tài)數(shù)碼管

    靜態(tài)數(shù)碼管靜態(tài)數(shù)碼管靜態(tài)數(shù)碼管靜態(tài)
    發(fā)表于 05-13 15:39 ?6次下載

    共陽(yáng)數(shù)碼管靜態(tài)顯示

    16-共陽(yáng)數(shù)碼管靜態(tài)顯示---51單片機(jī)源代碼 用keil直接打開(kāi)
    發(fā)表于 06-15 18:17 ?22次下載

    數(shù)碼管靜態(tài)顯示_數(shù)碼管靜態(tài)顯示程序

    數(shù)碼管靜態(tài)顯示,就是每一個(gè)數(shù)碼管的段碼都要獨(dú)占具有鎖存功能的輸出口,CPU把要顯示的字碼送到輸出口上,就可以使
    發(fā)表于 01-15 16:09 ?4.3w次閱讀

    數(shù)碼管靜態(tài)顯示介紹_8位數(shù)碼管靜態(tài)顯示程序解析

    數(shù)碼管顯示屏其中一類(lèi), 通過(guò)對(duì)其不同的管腳輸入相對(duì)的電流,會(huì)使其發(fā)亮,從而顯示出數(shù)字能夠顯示時(shí)間、日期、溫度等所有可用數(shù)字表示的參數(shù)。本文為大家介紹一個(gè)8位
    發(fā)表于 01-15 16:53 ?1.5w次閱讀

    利用FPGA DIY開(kāi)發(fā)板實(shí)現(xiàn)撥碼開(kāi)關(guān)控制靜態(tài)數(shù)碼管顯示

    FPGA diy作業(yè)實(shí)現(xiàn)撥碼開(kāi)關(guān)控制顯示數(shù)碼管0到8的靜態(tài)顯示。
    的頭像 發(fā)表于 06-20 14:07 ?3991次閱讀

    采用FPGA DIY實(shí)現(xiàn)key1控制靜態(tài)數(shù)碼管顯示

    FPGA靜態(tài)數(shù)碼管顯示視頻,通過(guò)key1控制數(shù)值的變化
    的頭像 發(fā)表于 06-20 08:56 ?3438次閱讀
    采用<b class='flag-5'>FPGA</b> DIY實(shí)現(xiàn)key1控制<b class='flag-5'>靜態(tài)</b><b class='flag-5'>數(shù)碼管</b><b class='flag-5'>顯示</b>

    正點(diǎn)原子開(kāi)拓者FPGA數(shù)碼管靜態(tài)顯示實(shí)驗(yàn)

    靜態(tài)驅(qū)動(dòng)也稱直流驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管的每一個(gè)段碼都由一個(gè)單片機(jī)的I/O端口進(jìn)行驅(qū)動(dòng),或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)的優(yōu)點(diǎn)是編程簡(jiǎn)單,
    的頭像 發(fā)表于 09-09 06:05 ?2783次閱讀
    正點(diǎn)原子開(kāi)拓者<b class='flag-5'>FPGA</b>:<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>靜態(tài)</b><b class='flag-5'>顯示</b>實(shí)驗(yàn)

    MCS-51實(shí)現(xiàn)靜態(tài)數(shù)碼管顯示

    MCS-51實(shí)現(xiàn)靜態(tài)數(shù)碼管顯示
    發(fā)表于 11-25 13:51 ?8次下載
    MCS-51實(shí)現(xiàn)<b class='flag-5'>靜態(tài)</b><b class='flag-5'>數(shù)碼管</b>的<b class='flag-5'>顯示</b>

    靜態(tài)數(shù)碼管和動(dòng)態(tài)數(shù)碼管

    目錄一,什么是數(shù)碼管二,靜態(tài)數(shù)碼管的驅(qū)動(dòng)三,動(dòng)態(tài)數(shù)碼管四,動(dòng)態(tài)數(shù)碼管顯示編程實(shí)戰(zhàn)五,使用38譯碼
    發(fā)表于 01-12 18:31 ?40次下載
    <b class='flag-5'>靜態(tài)</b><b class='flag-5'>數(shù)碼管</b>和動(dòng)態(tài)<b class='flag-5'>數(shù)碼管</b>

    數(shù)碼管靜態(tài)顯示電路設(shè)計(jì)

    數(shù)碼管靜態(tài)顯示電路設(shè)計(jì)
    的頭像 發(fā)表于 10-31 10:59 ?1980次閱讀

    數(shù)碼管顯示屏的靜態(tài)顯示編程是什么

    數(shù)碼管顯示屏的靜態(tài)顯示編程是一種簡(jiǎn)單的顯示方式,它指的是在任意時(shí)刻,數(shù)碼管上的所有段(a, b,
    的頭像 發(fā)表于 08-28 17:14 ?580次閱讀