我正在試圖製作一個2位數的BCD計數器,它將從0到99進行計數。我面臨的問題是,板上的7段顯示器正在更改數字同時。情景是這樣的 - 00,11,22 ... 99。FPGA上的2位BCD計數器
這裏的主要邏輯代碼:
module PartD(
output reg[0:6] lcd, //for one particular 7 segment LCD.
input clock,
output reg[0:7] sel // for selecting which LCD to be used
);
integer count=0;
//integer i=0, j=0;
reg[3:0] i, j; //4 bit reg for counting
[email protected](posedge clock)
begin
if(count==100000000) //(100MHz) count till 100M cycles...(1 sec delay)
begin
count = 0;
sel=00000001; //selecting the most significant digit
case (i)
0: lcd = 7'b0000001;
1: lcd = 7'b1001111;
2: lcd = 7'b0010010;
3: lcd = 7'b0000110;
4: lcd = 7'b1001100;
5: lcd = 7'b0100100;
6: lcd = 7'b0100000;
7: lcd = 7'b0001111;
8: lcd = 7'b0000000;
9: lcd = 7'b0000100;
endcase
sel=00000010; //selecting the least significant digit
case (j)
0: lcd = 7'b0000001;
1: lcd = 7'b1001111;
2: lcd = 7'b0010010;
3: lcd = 7'b0000110;
4: lcd = 7'b1001100;
5: lcd = 7'b0100100;
6: lcd = 7'b0100000;
7: lcd = 7'b0001111;
8: lcd = 7'b0000000;
9: lcd = 7'b0000100;
endcase
j = j+1;
if(j>9)
begin
j=0;
i = i+1; //increment i only when j overflows.
if(i>9)
i = 0;
end
end
else count = count + 1;
end
endmodule
由於兩個顯示器可以同時改變,似乎有一些邏輯上的錯誤。會是什麼呢。我是否犯了不考慮硬件的錯誤?
爲什麼你有i,j作爲整數和寄存器在同一時間? – Laleh
這是一個錯誤...已糾正它。 – archity
你能提供LCD零件編號?可能你應該更新每個LCD每秒50次或更多。 – alexander