私は、Verilogを学ぼうとしているFPGA初心者です。初期値または定数として、常にブロックのregに値を「割り当てる」方法はありますか。以下のコードでこのようなことをしようとしています。 8ビット定数が入力としてカウントされないため、エラーが発生します。また、常にオフクロックをトリガーしたくありません。レジスタを特定の値に割り当てたいだけです。合成可能にしたいので、最初のブロックは使用できません。どうもありがとう。
module top
(
input wire clk,
output wire [7:0] led
);
reg [7:0] data_reg ;
always @*
begin
data_reg = 8'b10101011;
end
assign led = data_reg;
endmodule
レジスタ宣言を初期化と組み合わせることができます。
reg [7:0] data_reg = 8'b10101011;
または、initial
ブロックを使用できます
reg [7:0] data_reg;
initial data_reg = 8'b10101011;
他の答えはすべて良いです。ザイリンクスFPGAデザインの場合、グローバルリセットラインを使用し、ほとんどのロジックのリセット条件にinitial
ブロックを使用することをお勧めしますnot。 Ken Chapman(Xilinx FPGAの第一人者)のホワイトペーパーを次に示します。
http://japan.xilinx.com/support/documentation/white_papers/wp272.pdf
右辺の引数が変更されないため、常に@ *はトリガーされません。 assignでワイヤを使用しないのはなぜですか?
module top (
input wire clk,
output wire [7:0] led
);
wire [7:0] data_reg ;
assign data_reg = 8'b10101011;
assign led = data_reg;
endmodule
値を変更できるフロップが実際に必要な場合、デフォルトはリセット句にあります。
module top
(
input clk,
input rst_n,
input [7:0] data,
output [7:0] led
);
reg [7:0] data_reg ;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
data_reg <= 8'b10101011;
else
data_reg <= data ;
end
assign led = data_reg;
endmodule
お役に立てれば
FPGAドキュメントで推奨されているものを使用する必要があります。リセットネットを使用する以外に、レジスタ値を初期化するポータブルな方法はありません。ほとんどの合成ターゲットでは、これに関連するハードウェアコストがあります。
チップに電力が供給されると、すべてのレジスタにランダムな値が含まれます。初期値を持つことはできません。常にランダムになります。
これが、レジスタを既知の値にリセットするためのリセット信号を持っている理由です。リセットはチップ外の何かによって制御され、それを使用するコードを記述します。
always @(posedge clk) begin
if (reset == 1) begin // For an active high reset
data_reg = 8'b10101011;
end else begin
data_reg = next_data_reg;
end
end