Difference between r1.11 and the current
@@ -16,16 +16,72 @@
[[회로,circuit]]
[[시뮬레이션,simulation]]
[[VG:베릴로그,Verilog]]
YouTube:"Verilog 강의"
https://en.wikipedia.org/wiki/Verilog
----
E=(A+B)C
[[시뮬레이션,simulation]]
<<tableofcontents>>
= Videos =
Verilog for Beginners - YouTube
https://www.youtube.com/playlist?list=PL9K1-gZiaFsMhcfMt0mdIgzhyx3VOJlI3
--------
Hardware Description Language Programming (Verilog) - YouTube
Derek Johnston
https://www.youtube.com/playlist?list=PLTFN8e-Y3kpEhLKNox-tRNJ9eNFxZopA0
----
Introduction to Verilog HDL using Free Software Icarus, GTKWave, and VS Code - YouTube
https://www.youtube.com/watch?v=vN1wzM0NO4c
Verilog modeling styles
{
gate-level modeling
{{{
and a1(o,a,b);
or or1(o,c,d);
}}}
dataflow modeling
{{{
assign Y=((!A)&&B)||(!C)
}}}
behavioral modeling
{{{
primitive pName(D,A,B,C);
output D;
input A,B,C;
table
0 0 0 : 1
0 0 1 : 0
0 1 0 : 1
0 1 1 : 1
1 0 0 : 0
endtable
endprimitive
}}}
모듈선언 간소화. old version:
{{{
module ModuleName(X,Y,A,B)
output X,Y;
input A,B;
…
endmodule
}}}
2005 version:
{{{
module ModuleName(output X,Y, input A,B)
…
endmodule
}}}
}
= Twins =
https://ko.wikipedia.org/wiki/베릴로그https://en.wikipedia.org/wiki/Verilog
----
[[VG:베릴로그,Verilog]]
= Examples =
excerpts from ManoE=(A+B)C
@@ -56,7 +112,7 @@
ex. from https://www.youtube.com/watch?v=2IReMT_zjK8
2-to-1 [[멀티플렉서,multiplexer]]
https://i.imgur.com/Z9qpWjL.png
{{{
module multiplex_gatelevel(A,B,X,out1);
2-to-1 [[멀티플렉서,multiplexer]]
https://i.imgur.com/Z9qpWjL.png
https://i.imgur.com/0KqnQ4d.png
gate level{{{
module multiplex_gatelevel(A,B,X,out1);
Terms
module 모듈,module
HDL 하드웨어기술언어,hardware_description_language,HDL
EDA electronic design automation 전자설계자동화 ? electronic design automation
digital_design
회로,circuit
시뮬레이션,simulation
module 모듈,module
a block of code that performs specific function
portinput port
output port
module 선언 시 처음에 input/outport port list 나열.
MKLoutput port
module 선언 시 처음에 input/outport port list 나열.
HDL 하드웨어기술언어,hardware_description_language,HDL
EDA electronic design automation 전자설계자동화 ? electronic design automation
digital_design
회로,circuit
시뮬레이션,simulation
1. Videos ¶
Verilog for Beginners - YouTube
https://www.youtube.com/playlist?list=PL9K1-gZiaFsMhcfMt0mdIgzhyx3VOJlI3
https://www.youtube.com/playlist?list=PL9K1-gZiaFsMhcfMt0mdIgzhyx3VOJlI3
Hardware Description Language Programming (Verilog) - YouTube
Derek Johnston
https://www.youtube.com/playlist?list=PLTFN8e-Y3kpEhLKNox-tRNJ9eNFxZopA0
Derek Johnston
https://www.youtube.com/playlist?list=PLTFN8e-Y3kpEhLKNox-tRNJ9eNFxZopA0
Introduction to Verilog HDL using Free Software Icarus, GTKWave, and VS Code - YouTube
https://www.youtube.com/watch?v=vN1wzM0NO4c
https://www.youtube.com/watch?v=vN1wzM0NO4c
Verilog modeling styles
{
gate-level modeling
{
gate-level modeling
and a1(o,a,b); or or1(o,c,d);dataflow modeling
assign Y=((!A)&&B)||(!C)behavioral modeling
primitive pName(D,A,B,C); output D; input A,B,C; table 0 0 0 : 1 0 0 1 : 0 0 1 0 : 1 0 1 1 : 1 1 0 0 : 0 endtable endprimitive
모듈선언 간소화. old version:
module ModuleName(X,Y,A,B) output X,Y; input A,B; … endmodule2005 version:
module ModuleName(output X,Y, input A,B) … endmodule}
3. Examples ¶
excerpts from Mano
E=(A+B)C
module or_and( output E, input A, B, C ); wire D; assign D = A || B; // logical or assign E = C && D; // logical and endmodule
멀티플렉서,multiplexer example from https://youtu.be/9SbI38MMN7Y?t=2267 - see there for diagram
module multiplexer (D0, D1, S, Z); output Z; input D0, D1, S; // S는 화면에 빠졌는데 있어야 함 wire temp0, temp1; not (Sbar, S); and (temp0, DO, Sbar); and (temp1, D1, S); or (Z, temp0, temp1); endmodule
ex. from https://www.youtube.com/watch?v=2IReMT_zjK8
2-to-1 멀티플렉서,multiplexer
gate level
2-to-1 멀티플렉서,multiplexer
gate level
module multiplex_gatelevel(A,B,X,out1); input A, B, X; output out1; wire not_x; wire out_and1, out_and2; not not1(not_X, X); and and1(out_and1, not_X, A); and and2(out_and2, X, B); or or1(out1, out_and1, out_and2); endmoduledataflow level
module multiplex_datalevel(A,B,X,out1); input A, B, X; output out1; assign out1 = ((~X&A)&A)|(B&X); endmodulebehavioral level
module multiplex_behavior(A,B,X,out1); input A, B, X; output reg out1; always@(*) begin if(X==0) out1 = A; else out1 = B; end endmodule
half_adder example from https://youtu.be/IREjtgG33hQ?t=131
module HalfAdd_Behave2 (a,b,c,s); input a,b; output c; output reg s; // <- output from always block goes to registers always // procedural statements must be inside 'always' block @(a,b) // @(...) : sensitivity list // 'always @(a,b)' means the always block is executed whenever a or b (or both) changes. always @(*) 또는 @*로 쓰고 컴파일러가 알아서 어떤 신호를 고려하게 할 지 하는 것도 가능. if (a != b) s = 1; else s = 0; assign c = a&b; // <- output of continuous assignment goes to net endmodule // HalfAdd_Behave2