CPLD
テンプレ †
// moduleのポートを設定(PORTはバスでもシグナルでもよい)
module MODULE_NAME (
PORT1, // in, desc.
PORT2, // in, desc.
PORT3 // out, desc.
);
// in / outの設定。ここでバスを明示しなければならない
input selector1;
input A;
input B
output [5:0] data;
// output(wire)とフリップフロップ(reg)の定義。バスを明示しなければならない。
wire [5:0] output;
reg Q;
reg [7:0] COUNTER;
[expression]
endmodule
expression †
数値 †
3'b10 // 3bit 3 (3bit定数:2進数で3)
4'o10 // 4bit 8 (4bit定数:8進数で8)
8'h80 // 8bit 128 (8bit定数:16進数で80)
8'd128 // 8bit 128 (8bit定数:10進数で128)
Z // ハイインピーダンス
X // 不定
always †
- conditionを常に監視し、満たされたらexpressionを実行する
- regの変数は、expressionの中の代入で<=を使わなければならない
always@ ([condition]) begin
[expression]
end
- conditionには立ち上がりエッジや立下りエッジが入ることが多い。
// 立ち上がり
always@ (posedge CLK) begin
Q <= D;
end
// 立ち下がり
always@ (negedge CLK) begin
Q <= D;
end
if †
if ([condition1]) begin
[expression1]
end else begin
[expression2]
end
シグナルのバス化 †
Q{3:0} <= {Q{2:0}, D};
assign †
assign O[7:0] = A[7:0] + 8'd1;