新手求助简单的VEILOG问题

2020-02-24 20:27发布

我实现一个两位数据选择器代码如下:
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型,不然就要报错呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
anjf163
1楼-- · 2020-02-24 21:11
你这种写法,最终会导致 AD_status 综合成锁存器。
anjf163
2楼-- · 2020-02-25 00:17
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
3楼-- · 2020-02-25 06:10
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路,两位选择信号怎么做呢
yghanwuji
4楼-- · 2020-02-25 07:24
 精彩回答 2  元偷偷看……
anjf163
5楼-- · 2020-02-25 12:27
diyzhangy 发表于 2013-12-24 15:21
assign AD_status = ( sel )? AD_statusH : AD_statusL;
这种写法对于两路数据选择可以用,如果据有4路, ...

举一反三即可,何必非要我写出来呢?
lizhezhe1988
6楼-- · 2020-02-25 12:52
使用always时序语句,则必须声明为reg类型。output信号默认是wire型变量,wire是线网,就是相当于实际中的连接线,你想assign的话就是直接连接,就是用wire型,它的值是随时变化的。但在always块语句中AD_status必须是reg型的,它只在沿变化时才发生变化。

一周热门 更多>