繁体   English   中英

十进制和字符串文字的Verilog串联

[英]Verilog concatenation of decimal and string literal

我想将十进制与字符串连接起来。 喜欢:

parameter AWIDTH = 15;
...
...

wire [AWIDTH-1:0] addra_bus;
assign addra_bus = cg_one ? {addra} : {AWIDTH, "'bz"};

在'cg_one'的基础上,它将选择{addra}或{AWIDTH,“'bz”}。 在三元运算符的错误条件下,我将AWIDTH与'bz串联在一起。 如果cg_one是1'b0,我应该在addra_bus中得到15'bz作为值。 说得通?

问题是在合成此代码时。 我收到以下警告:

WARNING: expression size 56 truncated to fit in target size 15 (VERI-1209)

为什么会这样呢? 56号从哪里来?

您不应该使用字符串文字。 您需要做的就是

assign addra_bus = cg_one ? addra : 'z;

'z将扩展为addra_bus的宽度

您正在尝试默认将32位AWIDTH和24位"'bz" (总共56位)保存到15位addra_bus

您应该限制的宽度AWIDTH和增加的宽度addra_bus 例如:

parameter AWIDTH = 6'd30;

wire [AWIDTH-1:0] addra_bus;
assign addra_bus = cg_one ? {addra} : {AWIDTH, "'bz"};

正如Dave已经提到的将总线置于高电平状态,您可以assign addra_bus = cg_one ? addra : {AWIDTH{1'bz}}; assign addra_bus = cg_one ? addra : {AWIDTH{1'bz}}; 但是,在驱动芯片级IO信号之前,不希望将总线以可合成的代码设置为“ z”。

如果要在总线上显示字符串15'bz进行调试。

reg [7:0]  val = {"0"+AWIDTH%10};
reg [7:0]  val1 = {("0"+AWIDTH/10)};
assign addra_bus = cg_one ? {addra} : {val,val1};

[假设参数大小只有99。] [因为每个字符需要8位,所以上面的代码仅显示“ 15”]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM