哪位大神能给我解释一下图 5.3 实现乘法的最长延时为 1 个与门的传输延时加上八个全加器的传输延时。假设每个全加器产生和与产生进位的传输延时相同,并且均相当 4 个与门的传输延时,则图 5.3 逐位进位并行乘法器的最长延时为 1+8×4=33 个门的传输延时。
还有状态机的问题
module fsm2(clk,rst_n,A,k1,k2,State);
input clk;
input rst_n;
input A;
output k1,k2;
output [4:0] State;
reg [4:0] State; //当前状态寄存器
assign k1 =State[0];
assign k2 =State[4];
parameter Idle = 5'b00000, //采用毒热编码(每个状态只有一个寄存器置位的状态机这样用的组合
电路省一些,而且速度也快)
Start = 5'b00010,
Stop = 5'b00100,
StoptoClear = 5'b11000,
Clear = 5'b01010,
CleartoIdle = 5'b00111; //编码 ,注意,只有在最后一句用分号,其他地方用逗号
always @(posedge clk or negedge rst_n)
if(!rst_n)
State <= Idle;
else case (State) //状态判断与组合逻辑赋值
Idle :if(A)
State <= Start;
else
State <= Idle;
Start :if(!A) State <= Stop;
else State <= Start;
Stop :if(A)
State <=StoptoClear;
else State <= Stop;
StoptoClear :State <= Stop;
Clear :if(!A)
State <= Clear;
else State <= Clear;
CleartoIdle :State <= Idle;
default : State <= Idle;//告诉综合器 case语句已经指定了所有状态,这样综合器就会删除不需要的译码电路,使生成的电路简单
endcase
endmodule
为什么此程序要加StoptoClear和CleartoIdle这两个状态,不理解,不加不行吗
-
-
一周热门 更多>