Verilogで自作のprimitiveを定義する


このエントリーをはてなブックマークに追加

user define primitive


  • Verilogにおいてprimitiveとは
  • どうやら、基本ゲートやスイッチのことっぽい
    • AND, NAND, OR, XOR, XNORなどそのへんが含まれる
    • スイッチもなので、cmosとかそのへんも含まれる
    • らしい


  • で、Verilogではプリミティブは自分でも定義?することができるっぽい
  • 定義する際は、primitive endprimitive で囲う

myprimitivexnor.v

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
`timescale 1ns/1ns
module udpcomparator(
input x,
input y,
output z
);
udpcompare c0(z, x, y);
endmodule
primitive udpcompare(out, in1, in2);
output out;
input in1, in2;
// define XNOR Gate
table
// in1 in2 : out
0 0 : 1;
0 1 : 0;
1 0 : 0;
1 1 : 1;
endtable
endprimitive


myprimitivexnor_test.v

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
`timescale 1ns/1ns
module udptest();
reg x;
reg y;
wire z;
// instantiate the unit under test(uut)
udpcomparator uut (
.x(x),
.y(y),
.z(z)
);
initial begin
x = 0;
y = 0;
end
initial begin
#100;
#50 x = 1;
#60 y = 1;
#70 y = 1;
#80 x = 0;
end
initial begin
$monitor("x=%d, y=%d, z=%d \n", x,y,z);
$dumpfile("udpcomparator.vcd");
$dumpvars(0, udptest);
end
endmodule
  • ちなみにtableで使用できるsymbolは 0 1 だけじゃなくて色々あるっぽい

このエントリーをはてなブックマークに追加