verilog FPGA有条件模块调用的问题,急!
写了一个简单的ALU,实现了加法和移位两个功能。加法(Adder)和移位(shifter)都是单独的小模块,然后在ALU中调用。ALU的输出是data_out,输出标志寄...
写了一个简单的ALU,实现了加法和移位两个功能。加法(Adder)和移位(shifter)都是单独的小模块,然后 在ALU中调用。ALU的输出是data_out,输出标志寄存器是flags,内部还有adder和shifter各自的使能信号enable1, enable2。ALU的选择信号是input select,用于选择data_out输出adder还是shifter的计算结果。
问题来了,在仿真波形里面,可以看到选择了select为000时, adder子模块的add_out(加法结果)有正确输出,但data_out就是没有输出!百思不得其解啊。然而这样的话:#1 data_out<=add_out或者assign data_out=add_out(有人说不能在always里面用assign,但仿真结果证明,assign不会对其他case产生影响)data_out就有正确结果!
就要交作业了,这个小问题还是不能解决。求大神帮忙!
reg[15:0] data_out;
reg[15:0] out;
output[3:0] flags;
reg[3:0] flags=3'b000;
reg enable1,enable2,direction, NP;
wire[15:0] add_out, shift_out;
wire[3:0] add_flag;
wire VF;
Adder adder(enable1, NP, data1_in, data2_in, add_out, add_flag);
shifter shift(enable2, direction, data1_in, shift_out, VF)
always @(select, data1_in, data2_in)
case(select)
3'b000:
begin
enable1<=1;
enable2<=0;
NP<=1; //指示加法还是减法
data_out<=add_out;
flags<=add_flag;
end 展开
问题来了,在仿真波形里面,可以看到选择了select为000时, adder子模块的add_out(加法结果)有正确输出,但data_out就是没有输出!百思不得其解啊。然而这样的话:#1 data_out<=add_out或者assign data_out=add_out(有人说不能在always里面用assign,但仿真结果证明,assign不会对其他case产生影响)data_out就有正确结果!
就要交作业了,这个小问题还是不能解决。求大神帮忙!
reg[15:0] data_out;
reg[15:0] out;
output[3:0] flags;
reg[3:0] flags=3'b000;
reg enable1,enable2,direction, NP;
wire[15:0] add_out, shift_out;
wire[3:0] add_flag;
wire VF;
Adder adder(enable1, NP, data1_in, data2_in, add_out, add_flag);
shifter shift(enable2, direction, data1_in, shift_out, VF)
always @(select, data1_in, data2_in)
case(select)
3'b000:
begin
enable1<=1;
enable2<=0;
NP<=1; //指示加法还是减法
data_out<=add_out;
flags<=add_flag;
end 展开
1个回答
晓网科技
2024-10-17 广告
2024-10-17 广告
ZigBee 协议属于高级通信协议,是基于上世界的IEEE协会制定的802协议,主要约束了网路的无线协议、通讯协议、安全协议和应用需求等方面的标准,其有效转播速率可以达到300Kbps (千比特率)。 和计算机通信的模式类似,ZigBee的...
点击进入详情页
本回答由晓网科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询