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
展开
 我来答
ziseouranle
2015-01-15 · TA获得超过681个赞
知道小有建树答主
回答量:486
采纳率:0%
帮助的人:372万
展开全部
你用always(*),别用always @(select, data1_in, data2_in),你的add_out都没在敏感列表里,怎么能输出
晓网科技
2024-10-17 广告
ZigBee 协议属于高级通信协议,是基于上世界的IEEE协会制定的802协议,主要约束了网路的无线协议、通讯协议、安全协议和应用需求等方面的标准,其有效转播速率可以达到300Kbps (千比特率)。 和计算机通信的模式类似,ZigBee的... 点击进入详情页
本回答由晓网科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式