數碼管顯示是比較簡單的顯示方式,在開發的過程中很多時候能起到驗證和顯示狀態的作用。由於開發最重要的就是實際上手操作,在實戰中慢慢學習verilog的語法細節(之前有學習過vhdl和c)。
數碼管通常是七段數碼管,感覺加點應該算八段,但是習慣於叫它七段數碼管。我使用的板子上是八位的數碼管,板子原理圖如下
爲了節約引腳資源,在單片機開發板中大部分多位的數碼管都是選擇採用鎖存器的方案,fpga則大部分都是直接驅動,這也時fpga和單片機不同的直觀感受((*^_^*)),我在進行設計的時候,考慮的是八位的數碼管需要實時的顯示我傳進去的數據。所以,在我的數碼管掃描顯示模塊中需要傳入要顯示的數據。
我設計的每一個數碼管顯示的範圍是0~9,因此每一個數碼管顯示數據需要用一個4位的bcd碼來表示(4位用不完)。大於9的顯示,我默認它爲不顯示。
我們模塊的傳入數據,
CLK——50Mhz時鐘
RST——復位信號
data[31:0]——顯示的數據,8*4
傳出的數據爲
ODATA——輸出的八位共陽極數碼管顯示碼。
DUAN——掃描的數碼位選(拼音打錯了,應該是wei)
module BCD(CLK,RES,DATA,ODATA,DUAN);
input CLK;
input RES;
input [31:0] DATA;
output reg [7:0] ODATA;
output reg [7:0] DUAN;
reg [3:0] BCDS;
reg [25:0] NUM_OF_CLK;
reg HZ_100_CLK;
always@(posedge CLK or negedge RES)
begin
if(!RES)
begin
NUM_OF_CLK <= 26'd0;
HZ_100_CLK <= 1'b0;
end
else if(NUM_OF_CLK < 26'd25_000)
NUM_OF_CLK <= NUM_OF_CLK + 26'd1;
else
begin
NUM_OF_CLK <= 26'd0;
HZ_100_CLK <= ~HZ_100_CLK;
end
end
always@(posedge HZ_100_CLK or negedge RES)
begin
if(!RES)
begin
BCDS <= 4'b0000;
DUAN <= 8'b1111_1110;
end
else
begin
case(DUAN)
8'b1111_1110:begin BCDS<=DATA[7:4]; DUAN <= 8'b1111_1101;end
8'b1111_1101:begin BCDS<=DATA[11:8]; DUAN <= 8'b1111_1011;end
8'b1111_1011:begin BCDS<=DATA[15:12]; DUAN <= 8'b1111_0111;end
8'b1111_0111:begin BCDS<=DATA[19:16]; DUAN <= 8'b1110_1111;end
8'b1110_1111:begin BCDS<=DATA[23:20]; DUAN <= 8'b1101_1111;end
8'b1101_1111:begin BCDS<=DATA[27:24]; DUAN <= 8'b1011_1111;end
8'b1011_1111:begin BCDS<=DATA[31:28]; DUAN <= 8'b0111_1111;end
default: begin BCDS<=DATA[3:0];DUAN <= 8'b1111_1110;end
endcase
end
end
always@(*)
begin
case(BCDS)
4'b0000:ODATA <= 8'hc0;
4'b0001:ODATA <= 8'hf9;
4'b0010:ODATA <= 8'ha4;
4'b0011:ODATA <= 8'hb0;
4'b0100:ODATA <= 8'h99;
4'b0101:ODATA <= 8'h92;
4'b0110:ODATA <= 8'h82;
4'b0111:ODATA <= 8'hf8;
4'b1000:ODATA <= 8'h80;
4'b1001:ODATA <= 8'h90;
default:ODATA <= 8'hff;
endcase
end
endmodule
代碼觀賞性比較差,下一次的筆記會加上註釋和格式的。
我的思路主要是,先分頻,得到100hz的掃描頻率,在按數碼管掃描的思路,掃描顯示。當我把case(BCDS)和case(DUAN)寫在同一個alway時,它會有一個週期的延遲。於是就分開寫了。上一個最後上機圖吧。由於邏輯比較簡單,就沒有加上仿真波形。
下一個是關於通信協議的,應該就大量都是仿真圖了。
建議該模塊再加一個進制轉換!!!!!!!!!!