0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1から学ぶHDL ~順序回路~

Posted at

1から学ぶHDL

まだ学習して1時間程度なので浅い内容です。

レジスタ

クロック信号が立ち上がった時に入力値を書きこむ。
image.png
https://qiita.com/rikitoro@github/items/426186a06242b24e0df2

上の表のようにclkが立ち上がった時だけdの値をqにセットする。

reg.v
module reg8(clk, d, q);
    input clk;
    input [7:0] d;
    output [7:0] q;
    reg [7:0] q;
    
    always@(posedge clk) begin
        q <= d;
    end
endmodule

posedgeが信号の立ち上がり。
negedgeが信号の立下り。

クロック(clk)が立ち上がったときにalwaysが実行されるようなイメージ。なのでqにdがセットされる。

always文でセットされるものはregで宣言。

リセット付きレジスタ

クロックが立ち上がる時、リセット信号が0であれば0をレジスタにセット。1であれば入力のdの値をセットする。

8bitリセットつきレジスタを示す。

reset_reg_8bit.v
module reg8(clk, rst, d, q);
    input clk, rst;
    input [7:0] d;
    output [7:0] q;
    reg [7:0] q;
always@(posedge clk) begin
    if(rst == 1'b0) begin
        q <= 8'b00000000;
    end else begin
        q <= d;
    end
end
endmodule

クロック

clkの初期値は0で繰り返す。

clk.v
initial begin
clk = 1’b0;
forever #10 clk = ~clk;
end

10秒経過するごとにclkを反転する。
もしrst(リセット信号が0であればレジスタqに0をセットする。

ロード付きレジスタ

ロード信号が1ならレジスタにdの値をセット、それ以外は書き込まずに今の値を保持。

load_reg_8bit.v
module reg8(clk, rst, ld, d, q);
    input clk, rst, ld;
    input [7:0] d;
    output [7:0] q;
    reg [7:0] q;
    always@(posedge clk) begin
        if(rst == 1'b0) begin
            q <= 8'b00000000;
        end else if(ld == 1b1) begin
            q <= d;
        end
    end
endmodule

clkが立ち上がった時、リセットレジスタが0ならばレジスタqに0をセット。
レジスタ信号が1ならば入力dをレジスタqにセット。
それ以外の値のときは保持する。

カウンタ

ci=1:インクリメント・ci=0は値を保持する。

counter.v
module cnt8(
     clk, rst, ci, co, q);
    input clk, rst;
    input ci;
    output co;
    output [7:0] q;
    reg [7:0] q;
    always@(posedge clk) begin
        if(rst == 1'b0) begin
            q <= 8'b00000000;
        end else begin
            q <= q + ci;
        end
    end
    assign co = &{q, ci};
endmodule

ciが0の時は加算しても値は保持されたままなのでciの値に関係なく加算nされる。

最後の行は全ビットの論理積を取っている。q=11111111でci=1を加算するときは、co=1になるように全ビットの論理積をとる。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?