早教吧作业答案频道 -->其他-->
写了个用Verilog描述的无符号加法器,用移位加实现,但是加法不能用Verilog的加号,只能用自己的加法器模modulemul4bit(A,B,M);//四位乘以四位,结果M为8位.inputwire[3:0]A,B;outputreg[7:0]M;wireCo;regC;wi
题目详情
写了个用Verilog描述的无符号加法器,用移位加实现,但是加法不能用Verilog的加号,只能用自己的加法器模
module mul_4bit(A,B,M); //四位乘以四位,结果M为8位.
input wire [3:0] A,B;
output reg [7:0] M;
wire Co;
reg C;
wire [3:0] S;
adder_4bit a0(M[7:4],A,1'b0,S,Co); // S是四位的结果,Co是进位标志
always @(*) begin
M = {4'b0000,B};
repeat (4)
if(M[0]) begin
C = Co;
M[7:4] = S;
M = M >> 1;
M[7] = C;
end
else M = M >> 1;
end
endmodule
可以保证加法器没错,但是结果是错的...如果把加法器换成加好,也就是
repeat (4)
if(M[0]) begin
{C,M[7:4]} = M[7:4]+A;
M = M >> 1;
M[7] = C;
end
结果就是对的..
感觉我的写法时序有点混乱,请问问题出在哪,应该怎么写?
module mul_4bit(A,B,M); //四位乘以四位,结果M为8位.
input wire [3:0] A,B;
output reg [7:0] M;
wire Co;
reg C;
wire [3:0] S;
adder_4bit a0(M[7:4],A,1'b0,S,Co); // S是四位的结果,Co是进位标志
always @(*) begin
M = {4'b0000,B};
repeat (4)
if(M[0]) begin
C = Co;
M[7:4] = S;
M = M >> 1;
M[7] = C;
end
else M = M >> 1;
end
endmodule
可以保证加法器没错,但是结果是错的...如果把加法器换成加好,也就是
repeat (4)
if(M[0]) begin
{C,M[7:4]} = M[7:4]+A;
M = M >> 1;
M[7] = C;
end
结果就是对的..
感觉我的写法时序有点混乱,请问问题出在哪,应该怎么写?
▼优质解答
答案和解析
这个加法器不是时序加法器,最好加一个时钟信号方便全局时钟统一,很有可能是这一个原因.还有always@(*)括号里面为啥是*
还有一个问题,这个repeat是综合出4个加法器,但是你那个却只是调用了一个加法器.verilog不是C语言,一个always模块内部只要是平行条件的,是并行执行的.千万不要忘了这一点.
还有一个问题,这个repeat是综合出4个加法器,但是你那个却只是调用了一个加法器.verilog不是C语言,一个always模块内部只要是平行条件的,是并行执行的.千万不要忘了这一点.
看了写了个用Verilog描述的无...的网友还看了以下:
若ab=8,a+b=-6,则a=?b=?若ab=22,a+b=13,则a=?b=?若ab=-6,a 2020-05-17 …
(U+V)a=(U-V)b怎么化简出V/U=a-b/a+b 2020-05-23 …
大一期末考试复习题,求教C语言编程高手1.设inta=2,b=6,c=8;,表达式(a,b),(c 2020-06-11 …
设集合S={1,2,3...,8},A,B是S的两个非空子集,且A中最大的数小于B中最小的数,则这 2020-07-29 …
lingo中根号和反三角函数怎样拼写比如v=L*(a/b*(h-b)*sqrt4(h*(2*b-h 2020-08-03 …
lingo中根号和反三角函数怎样拼写比如v=L*(a/b*(h-b)*sqrt4(h*(2*b-h 2020-08-03 …
如果a/1=b*0.8=c/0.8,(a\b\c不为0)那么a\b\c的大小关系正确的是()A.a> 2020-11-01 …
4道分解因式.2道分解计算(初二)分解因式1.x^4(x-y)+y^4(y-x)2.4-12(x-y 2020-11-07 …
数学老师给学生出了一道题,计算:(2(a+b)^5-3(a+b)^4+(-a-b)^3)/(2(a+ 2020-12-09 …
小王从甲地到乙地往返的时速分别为a和b(a<b),其全程平均时速为v,则A,a<v<根号ab,B,v 2020-12-09 …