我想做一个乘法器,2位二进制输入a[1:0] b[1:0] ,输出端c[3:0],程序如下,但我发现,若a=2,b=2,则c=5; 若a=2,b=3,则c=7,结果总是大1个数。(这样写乘法器,可能繁琐,但是理论上是行得通的,为什么结果就是不对)程序如下:
module mult(a,b,c);
input [1:0] a,b;
output [3:0] c;
reg [3:0]c;
always@(a,b)
begin
if(a==0 || b==0)
c=0;
else if(a==1)
c=b;
else if(b==1)
c=a;
else if(a==2 && b==2)
c=4;
else if(a==2 && b==3)
c=6;
else if(a==3 && b==2)
c=6;
else if(a==3 && b==3)
c=9;
end
endmodule
此帖出自
小平头技术问答
建议改成时序的,否则乘法器速度极低;
最快的是查找表。
module cntt7(clk,rst,out);
input clk,rst;
output out;
reg out;
reg[2:0]temp;
always@(posedge clk)
begin
if(rst)
temp<=0;
else
begin
temp<=temp+1;
if(temp==7)
begin temp<=0;out<=1; end
end
end
endmodule
input clk,rst;
output out;
reg out;
reg[2:0]temp;
always@(posedge clk)
begin
out<=0;
if(rst)
temp<=0;
else
begin
temp<=temp+1;
if(temp==7)
begin temp<=0;out<=1; end
end
end
endmodule
即使给out初值赋为0,则out输出一直为0
一周热门 更多>