完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
写了一个简单的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,但***不会对其他case产生影响)data_out就有正确结果! 第二:我延时一段时间后把select改成了110,按理说enable1就该为0(adder不使能),enable2就该为1(shifter使能),adder内部就不应该再运算了,但仿真显示adder内部还是取了新输入的值并做了运算,shifter也做了运算。不知道怎么回事。 入手verilog还没多久,可能还有些细节东西没有掌握。也许是由于编程的思维惯性,对这种同时赋值、并行发生什么的感觉太不可思议了——总还是得有个先后的顺序吧。。求大虾赐教啊! 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 3'b110: begin enable1<=0; enable2<=1; direction<=1; data_out<=shift_out; flags[3]<=VF; end endcase end |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1779 浏览 1 评论
1518 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1735 浏览 0 评论
954 浏览 0 评论
2525 浏览 0 评论
1568 浏览 39 评论
5803 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 18:30 , Processed in 0.531359 second(s), Total 69, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号