打印

新手求助简单的VEILOG问题

[复制链接]
1073|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
diyzhangy|  楼主 | 2013-12-24 12:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我实现一个两位数据选择器代码如下:
module a222(AD_statusH,AD_statusL,AD_status,sel);
    input[1:0] AD_statusH,AD_statusL;
    input sel;
    output [1:0] AD_status;
    reg  [1:0] AD_status;
always@(sel)
    case(sel)
                1'b1:AD_status=AD_statusH;
                1'b0:AD_status=AD_statusL;
    endcase
endmodule
很明显这一个组合逻辑电路,问题是AD_status为什么一定成reg型,不然就要报错呢

相关帖子

沙发
anjf163| | 2013-12-24 12:45 | 只看该作者
你这种写法,最终会导致 AD_status 综合成锁存器。

使用特权

评论回复
板凳
anjf163| | 2013-12-24 12:48 | 只看该作者
input  wire [1:0] AD_statusH,AD_statusL;
input  wire sel;

output wire [1:0] AD_status;

assign AD_status = ( sel )? AD_statusH : AD_statusL;

你测试一下。

使用特权

评论回复
地板
diyzhangy|  楼主 | 2013-12-24 15:21 | 只看该作者
anjf163 发表于 2013-12-24 12:48
input  wire [1:0] AD_statusH,AD_statusL;
input  wire sel;

assign AD_status = ( sel )? AD_statusH : AD_statusL;
这种写法对于两路数据选择可以用,如果据有4路,两位选择信号怎么做呢

使用特权

评论回复
5
yghanwuji| | 2013-12-24 17:17 | 只看该作者
输出就要定义为reg类型

使用特权

评论回复
6
anjf163| | 2013-12-25 12:45 | 只看该作者
diyzhangy 发表于 2013-12-24 15:21
assign AD_status = ( sel )? AD_statusH : AD_statusL;
这种写法对于两路数据选择可以用,如果据有4路, ...

举一反三即可,何必非要我写出来呢?

使用特权

评论回复
7
lizhezhe1988| | 2013-12-30 17:01 | 只看该作者
使用always时序语句,则必须声明为reg类型。output信号默认是wire型变量,wire是线网,就是相当于实际中的连接线,你想assign的话就是直接连接,就是用wire型,它的值是随时变化的。但在always块语句中AD_status必须是reg型的,它只在沿变化时才发生变化。

使用特权

评论回复
8
asdfgh_123456| | 2013-12-31 16:17 | 只看该作者
还是先看看有关Verilog的书再写程序吧。打好基本功还是很有必要的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

92

帖子

0

粉丝