wire用常数值驱动
wire [7:0] y=15;
编译后:
L_0x7fe1e6b40018 .functor BUFT 1, C4<00001111>, C4<0>, C4<0>, C4<0>; //右值,驱动源定义。
v0x562fe4451e70_0 .net "y", 7 0, L_0x7fe1e6b40018; 1 drivers //y为线网类型,被functor驱动
这个跟reg不一样,不需要专门写一个线程来进行初始化,因为它是持续存在的,所以只需要一个因子,或者叫函数。
wire用非常数值驱动
wire用非常数值驱动:
reg [7:0] x;
reg [7:0] y;
wire [7:0] z;
assign z=(x&y)+(x|y)+(x^y); //这个括号一定要写对,如果不加括号,结果截然不同。
编译之后:
L_0x56265c2f9980 .functor AND 8, v0x56265c2f9690_0, v0x56265c2f97c0_0, C4<11111111>, C4<11111111>; //变量x&y,产生逻辑电路L_x980
L_0x56265c2f9a70 .functor OR 8, v0x56265c2f9690_0, v0x56265c2f97c0_0, C4<00000000>, C4<00000000>; //变量x|y,产生逻辑电路L_xa70
L_0x56265c2f9c50 .functor XOR 8, v0x56265c2f9690_0, v0x56265c2f97c0_0, C4<00000000>, C4<00000000>; //变量x^y,产生逻辑电路L_xc50
v0x56265c2b0e40_0 .net *"_ivl_0", 7 0, L_0x56265c2f9980; 1 drivers
v0x56265c2f9410_0 .net *"_ivl_2", 7 0, L_0x56265c2f9a70; 1 drivers
v0x56265c2f94f0_0 .net *"_ivl_4", 7 0, L_0x56265c2f9bb0; 1 drivers
v0x56265c2f95b0_0 .net *"_ivl_6", 7 0, L_0x56265c2f9c50; 1 drivers
v0x56265c2f9690_0 .var "x", 7 0; //变量x
v0x56265c2f97c0_0 .var "y", 7 0; //变量y
v0x56265c2f98a0_0 .net "z", 7 0, L_0x56265c2f9d60; 1 drivers //逻辑L_xd60,驱动变量z
E_0x56265c2b1460/0 .event negedge, v0x56265c2f97c0_0;
E_0x56265c2b1460/1 .event posedge, v0x56265c2f97c0_0;
E_0x56265c2b1460 .event/or E_0x56265c2b1460/0, E_0x56265c2b1460/1;
L_0x56265c2f9bb0 .arith/sum 8, L_0x56265c2f9980, L_0x56265c2f9a70; //逻辑L_x980+L_xa70,产生逻辑L_xbb0
L_0x56265c2f9d60 .arith/sum 8, L_0x56265c2f9bb0, L_0x56265c2f9c50; //逻辑L_xbb0+L_xc50,产生逻辑L_xd60
wire产生.net,vxxx
reg产生.var,vxxx
与或非表达式产生.functor,L_xxx
数学运算表达式产生.arith,L_xxx
表达式可以组合新的表达式,方法是.functor或者.arith
表达式都驱动一个中间线网.net,v_xxx
事件产生E_xxx
事件可以和事件组合成新的事件。
取反:
module test;
reg [7:0] x=20;
wire [7:0] z;
assign z=~x;
endmodule
编译后:
L_0x55d5918ed6e0 .functor NOT 8, v0x55d5918ba8a0_0, C4<00000000>, C4<00000000>, C4<00000000>; //x取反得到L_xe0
v0x55d5918ba8a0_0 .var "x", 7 0; //x变量定义
v0x55d5918ed600_0 .net "z", 7 0, L_0x55d5918ed6e0; 1 drivers //L_xe0驱动z
.scope S_0x55d5918a9a30;
T_0 ;
%pushi/vec4 20, 0, 8; //20入栈
%store/vec4 v0x55d5918ba8a0_0, 0, 8; //栈内数据赋值x.
%end;
.thread T_0;