Altera DE2 開発ボードを使用しており、スイッチの入力を読み取りたいと考えています。これはレジスタに格納されます。カウンタに基づいて、これらのレジスタがインクリメントされます。レジスタは、B2D コンバーターを介して 7 セグメント ディスプレイに出力されることになっています。しかし、関数にレジスタを渡すことはできません。
wire [26:0] Q,Q2,Q3,Q4;
wire [3:0] one,two,three,four;
reg SecInc,MinInc,HrInc;
reg [3:0] M1,M2,H1,H2;
assign one = SW[3:0];
assign two = SW[7:4];
assign three = SW[11:8];
assign four = SW[15:12];
always begin
M1 = SW[3:0];
M2 = SW[7:4];
H1 = SW[11:8];
H2 = SW[15:12];
end
これが、入力を取得して保存する方法です。それらは、時間と分のバイナリ表現として使用するスイッチに由来します。カウンターに基づいて、1 分または 1 時間のレジスターをインクリメントします。
//increment seconds from 0 to 60
counter seconds (SecInc,KEY[0],Q2);
defparam seconds.n = 8;
defparam seconds.mod = 60;
always @ (negedge CLOCK_50) begin
if (Q2 >= 60) begin
MinInc = 1;
M1 <= M1 + 1'b1;
if(M1 >= 9) begin
M1 <= 0;
M2 <= M2 + 1'b1;
end
end else begin
MinInc = 0;
end
end
結果を SSD に表示します。
hex(M1,HEX4);
hex(M2,HEX5);
hex(H1,HEX6);
hex(H2,HEX7);
ここに問題があります。これは Verilog では許可されていません。B2D 変換を使用して 0 から 9 までの数値を表示する関数にレジスタを送信する方法が必要です。
Verilog を正式に紹介したことは一度もありませんでしたが、できることはすべて試しました。私は、私が示したカウンターの Q2 のように、1、2、3、4 を渡し、モジュールにそれらをインクリメントさせる新しいモジュールを作成しようとさえしました。どんな提案や助けも大歓迎です!
ここで要求されているのは、hex モジュールです。
module hex(BIN, SSD);
input [15:0] BIN;
output reg [0:6] SSD;
always begin
case(BIN)
0:SSD=7'b0000001;
1:SSD=7'b1001111;
2:SSD=7'b0010010;
3:SSD=7'b0000110;
4:SSD=7'b1001100;
5:SSD=7'b0100100;
6:SSD=7'b0100000;
7:SSD=7'b0001111;
8:SSD=7'b0000000;
9:SSD=7'b0001100;
endcase
end
endmodule
前もって感謝します!