verilog
대부분의 디지털 디자인은 RTL과 같은 더 높은 수준의 추상화에서 수행되지만 및과 같은 조합 요소를 사용하여 더 낮은 수준에서 더 작은 결정론적 회로를 구축하는 것이 직관적이 되는 경우가 있습니다. 및 또는 . 이 수준에서 수행되는 모델링을 일반적으로 게이트 수준 모델링이라고 합니다. 게이트를 포함하므로 하드웨어 회로도와 Verilog 코드 간에 일대일 관계가 있습니다.
Verilog는 primitives로 알려진 몇 가지 기본 논리 게이트를 지원합니다. 이미 사전 정의되어 있으므로 모듈처럼 인스턴스화할 수 있습니다.
이러한 프리미티브는 AND를 구현합니다. 및 또는 많은 스칼라 입력을 받고 단일 스칼라 출력을 제공하는 게이트. 이러한 프리미티브에 대한 인수 목록의 첫 번째 터미널은 입력이 변경될 때마다 업데이트되는 출력입니다.
module gates ( input a, b,
output c, d, e);
and (c, a, b); // c is the output, a and b are inputs
or (d, a, b); // d is the output, a and b are inputs
xor (e, a, b); // e is the output, a and b are inputs
endmodule
module tb;
reg a, b;
wire c, d, e;
integer i;
gates u0 ( .a(a), .b(b), .c(c), .d(d), .e(e));
initial begin
{a, b} = 0;
$monitor ("[T=%0t a=%0b b=%0b c(and)=%0b d(or)=%0b e(xor)=%0b", $time, a, b, c, d, e);
for (i = 0; i < 10; i = i+1) begin
#1 a <= $random;
b <= $random;
end
end
endmodule
시뮬레이션 로그 ncsim> run [T=0 a=0 b=0 c(and)=0 d(or)=0 e(xor)=0 [T=1 a=0 b=1 c(and)=0 d(or)=1 e(xor)=1 [T=2 a=1 b=1 c(and)=1 d(or)=1 e(xor)=0 [T=4 a=1 b=0 c(and)=0 d(or)=1 e(xor)=1 [T=5 a=1 b=1 c(and)=1 d(or)=1 e(xor)=0 [T=6 a=0 b=1 c(and)=0 d(or)=1 e(xor)=1 [T=7 a=1 b=0 c(and)=0 d(or)=1 e(xor)=1 [T=10 a=1 b=1 c(and)=1 d(or)=1 e(xor)=0 ncsim: *W,RNQUIE: Simulation is complete.
위의 모든 게이트의 역함수는 nand
형식으로도 사용할 수 있습니다. , nor
및 xnor
. primitives 역 버전으로 전환됩니다.
module gates ( input a, b,
output c, d, e);
// Use nand, nor, xnor instead of and, or and xor
// in this example
nand (c, a, b); // c is the output, a and b are inputs
nor (d, a, b); // d is the output, a and b are inputs
xnor (e, a, b); // e is the output, a and b are inputs
endmodule
module tb;
reg a, b;
wire c, d, e;
integer i;
gates u0 ( .a(a), .b(b), .c(c), .d(d), .e(e));
initial begin
{a, b} = 0;
$monitor ("[T=%0t a=%0b b=%0b c(nand)=%0b d(nor)=%0b e(xnor)=%0b", $time, a, b, c, d, e);
for (i = 0; i < 10; i = i+1) begin
#1 a <= $random;
b <= $random;
end
end
endmodule
시뮬레이션 로그 ncsim> run [T=0 a=0 b=0 c(nand)=1 d(nor)=1 e(xnor)=1 [T=1 a=0 b=1 c(nand)=1 d(nor)=0 e(xnor)=0 [T=2 a=1 b=1 c(nand)=0 d(nor)=0 e(xnor)=1 [T=4 a=1 b=0 c(nand)=1 d(nor)=0 e(xnor)=0 [T=5 a=1 b=1 c(nand)=0 d(nor)=0 e(xnor)=1 [T=6 a=0 b=1 c(nand)=1 d(nor)=0 e(xnor)=0 [T=7 a=1 b=0 c(nand)=1 d(nor)=0 e(xnor)=0 [T=10 a=1 b=1 c(nand)=0 d(nor)=0 e(xnor)=1 ncsim: *W,RNQUIE: Simulation is complete.
이 게이트는 두 개 이상의 입력을 가질 수 있습니다.
module gates ( input a, b, c, d,
output x, y, z);
and (x, a, b, c, d); // x is the output, a, b, c, d are inputs
or (y, a, b, c, d); // y is the output, a, b, c, d are inputs
nor (z, a, b, c, d); // z is the output, a, b, c, d are inputs
endmodule
module tb;
reg a, b, c, d;
wire x, y, z;
integer i;
gates u0 ( .a(a), .b(b), .c(c), .d(d), .x(x), .y(y), .z(z));
initial begin
{a, b, c, d} = 0;
$monitor ("[T=%0t a=%0b b=%0b c=%0b d=%0b x=%0b y=%0b x=%0b", $time, a, b, c, d, x, y, z);
for (i = 0; i < 10; i = i+1) begin
#1 a <= $random;
b <= $random;
c <= $random;
d <= $random;
end
end
endmodule
시뮬레이션 로그 ncsim> run [T=0 a=0 b=0 c=0 d=0 x=0 y=0 x=1 [T=1 a=0 b=1 c=1 d=1 x=0 y=1 x=0 [T=2 a=1 b=1 c=1 d=0 x=0 y=1 x=0 [T=3 a=1 b=1 c=0 d=1 x=0 y=1 x=0 [T=4 a=1 b=0 c=1 d=0 x=0 y=1 x=0 [T=5 a=1 b=0 c=1 d=1 x=0 y=1 x=0 [T=6 a=0 b=1 c=0 d=0 x=0 y=1 x=0 [T=7 a=0 b=1 c=0 d=1 x=0 y=1 x=0 [T=8 a=1 b=1 c=1 d=0 x=0 y=1 x=0 [T=9 a=0 b=0 c=0 d=1 x=0 y=1 x=0 [T=10 a=0 b=1 c=1 d=1 x=0 y=1 x=0 ncsim: *W,RNQUIE: Simulation is complete.
이 게이트에는 하나의 스칼라 입력과 하나 이상의 출력만 있습니다. buf
버퍼를 나타내며 극성의 변경 없이 단순히 입력에서 출력으로 값을 전송합니다. not
입력에서 신호의 극성을 반전시키는 인버터를 나타냅니다. 따라서 입력에서 0은 1을 생성하고 그 반대의 경우도 마찬가지입니다.
module gates ( input a,
output c, d);
buf (c, a); // c is the output, a is input
not (d, a); // d is the output, a is input
endmodule
module tb;
reg a;
wire c, d;
integer i;
gates u0 ( .a(a), .c(c), .d(d));
initial begin
a = 0;
$monitor ("[T=%0t a=%0b c(buf)=%0b d(not)=%0b", $time, a, c, d);
for (i = 0; i < 10; i = i+1) begin
#1 a <= $random;
end
end
endmodule
시뮬레이션 로그 xcelium> run [T=0 a=0 c(buf)=0 d(not)=1 [T=2 a=1 c(buf)=1 d(not)=0 [T=8 a=0 c(buf)=0 d(not)=1 [T=9 a=1 c(buf)=1 d(not)=0 xmsim: *W,RNQUIE: Simulation is complete.
포트 목록의 마지막 터미널은 게이트의 입력에 연결되고 다른 모든 터미널은 게이트의 출력 포트에 연결됩니다. 다음은 거의 사용되지 않는 다중 출력 버퍼의 예입니다.
module gates ( input a,
output c, d);
not (c, d, a); // c,d is the output, a is input
endmodule
시뮬레이션 로그 xcelium> run [T=0 a=0 c=1 d=1 [T=2 a=1 c=0 d=0 [T=8 a=0 c=1 d=1 [T=9 a=1 c=0 d=0 xmsim: *W,RNQUIE: Simulation is complete.
출력을 활성화하기 위한 추가 제어 신호가 있는 버퍼 및 인버터는 bufif
를 통해 사용할 수 있습니다. 및 notif
기초 요소. 이 게이트는 제어 신호가 활성화된 경우에만 유효한 출력을 가지며 그렇지 않으면 출력이 하이 임피던스가 됩니다. 두 가지 버전이 있습니다. 하나는 bufif1
과 같이 1로 표시되는 정상적인 제어 극성입니다. 및 notif1
bufif0
와 같이 0으로 표시된 제어 극성이 반전된 두 번째 및 notif0
.
verilog
수문은 물의 흐름을 제어하는 데 사용되는 메커니즘입니다. 이러한 장치는 수처리 공장, 광산, 댐, 논, 크랜베리 습지 등에서 자주 사용됩니다. 문은 일반적으로 나무 또는 금속으로 만들어지며 종종 프레임에서 수직으로 미끄러져 열리고 닫히므로 공간에서 물이 흐르거나 그 안에 포함될 수 있습니다. 이러한 이유로 수문 밸브라고도 합니다. . 그러나 수문 설계는 수직 슬라이딩 시스템에만 국한되지 않습니다. 한 종류의 수문은 플랩과 같은 역할을 하며 한쪽이 다른 쪽보다 더 큰 수압에 의해 움직입니다. 다른 것들은 본질적으로 원통형입니
수평계는 목수, 건축업자, 심지어 집에 있는 사람들이 그림을 걸기 위해 사용하는 매우 오래된 도구로 직선 또는 수직선을 결정하는 데 도움이 됩니다. 수평 방식으로 하나를 정렬할 때 목표는 레벨 중앙에 있는 소량의 액체에 있는 거품이 두 라인 사이의 중앙에 있도록 하는 것이기 때문에 이를 버블 레벨이라고도 합니다. 이렇게 하면 선이 직선인지 여부를 상당히 정확하게 알 수 있습니다. 수평계 수직선을 측정하기 위한 수준기 유형도 있으며, 이는 다소 다른 표준에 따라 작동할 수 있습니다. 위에서 언급했듯이 정신 수준은 확실히 고대입니다.