现在利用VerilogHDL代码来具体描述这种连续赋值与过程赋值区别;这段代码是描述LED轻量级密码算法实现有限域乘法模块。
连续赋值实现代码:
`timescale1ns/1ns
moduleFieldMutil(c,a,b);
input[0:3]a,b;
output[0:3]c;
wire[0:3]s2,s1,s0;//定义为线网型变量
assigns2=(a[0]==1)?{a[1:2],!a[3],1‘b1}:{a[1:3],1’b0};//使用assign进行赋值
assigns1=(s2[0]==1)?{s2[1:2],!s2[3],1‘b1}:{s2[1:3],1’b0};
assigns0=(s1[0]==1)?{s1[1:2],!s1[3],1‘b1}:{s1[1:3],1’b0};
assignc=((b[3]==1)?a:0)^((b[2]==1)?s2:0)^((b[1]==1)?s1:0)^((b[0]==1)?s0:0);
endmodule
过程赋值实现代码:
`timescale1ns/1ns
moduleFieldMutil(c,a,b,clk);
inputclk;
input[3:0]a,b;
output[3:0]c;
reg[3:0]c;//定义为寄存器类型变量
regk;
always@(posedgeclk)begin//使用always关键字,来进行赋值,并且clk时钟信号
c=0;
k=c[3];
c=c《《1;
c={c[3:2],c[1]^k,c[0]^k};//modf(z)
if(b[3]==1)c=c^a;//c=c*z+a;
if(b[2]==1)c=c^a;
if(b[1]==1)c=c^a;
if(b[0]==1)c=c^a;
end
endmodule
VerilogHDL语言连续赋值与过程赋值方式区分方法与理解运用已经给大家讲清楚了。
关于EDA,IC设计就介绍完了,您有什么想法可以联系小编。