Logic 条件:多位压缩阵列的逻辑状态
下面的配置Logic 条件:多位压缩阵列的逻辑状态,logic,verilog,Logic,Verilog,下面的配置 reg [3:0] myreg; always@(...) begin ... if(myreg) begin <events> end ... end reg[3:0]myreg; 总是@(…)开始 ... 如果(myreg)开始结束。。。 结束 在不引用压缩数组中的特定位和位之间的逻辑操作的情况下,如何处理对“myreg”的引用 编辑:请您提供您所解释的行为记录在哪里?由于这种语义结构是允许的,我想应该有一些关于它的记录。。。谢谢大家! 编辑1:感谢您迄
reg [3:0] myreg;
always@(...) begin
...
if(myreg) begin <events> end ...
end
reg[3:0]myreg;
总是@(…)开始
...
如果(myreg)开始结束。。。
结束
在不引用压缩数组中的特定位和位之间的逻辑操作的情况下,如何处理对“myreg”的引用
编辑:请您提供您所解释的行为记录在哪里?由于这种语义结构是允许的,我想应该有一些关于它的记录。。。谢谢大家!
编辑1:感谢您迄今为止的所有答案。让我们重新关注以下两点:
- 为什么您认为(myreg)的逻辑值是减少还是减少(例如不减少)——是否有标准指南?让我们关掉常识和我们对“对”和“错”的感觉——这些不是我们在数学/控制论中得出结论的基础
- “它可能在另一个模拟器中表现不同”——或者在现实生活中,这是真的吗? 这让我感到震惊,因为(a)我找不到说明它必须是一个缩减的文档,以及(b)Quartus(我使用的)没有对上述语法给出任何警告或错误
if (myreg) begin
...
作为myreg ie的一个或一个位缩减:
if ( |myreg == 1'b1) begin
...
正如Greg发现的,is第12.4节中的相关(SystemVerilog IEEE 1800-2012标准)章节
其计算结果为false(即,具有零值或值为x或z)
如果(myreg)提供的代码有效,但给定的x或z将计算为false,而不是传播x,如果使用未初始化的寄存器,您可能会发现RTL和门级模拟之间的差异,最初的x将评估为假,而不是可能为1并评估为真。本VCS 2014.2解释:
if (myreg) begin
...
作为myreg ie的一个或一个位缩减:
if ( |myreg == 1'b1) begin
...
正如Greg发现的,is第12.4节中的相关(SystemVerilog IEEE 1800-2012标准)章节
其计算结果为false(即,具有零值或值为x或z)
如果(myreg)提供的代码有效,但给定的x或z将计算为false,而不是传播x,您可能会发现RTL和门级模拟之间的差异。如果使用未初始化的寄存器,初始x将计算为false,而不是可能为1,并计算为true。是,@Morgan是正确的,当我合成以下代码时,Xillinx-ISE和Questasim也在做同样的事情
module aa( input clk,
input rst_n,
input [4:0] my_reg,
output reg chk
);
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n) begin
chk <= 1'bz;
end else begin
if (my_reg) begin
chk <= 1'b1;
end
else begin
chk <= 1'b0;
end
end
end
endmodule
模块aa(输入时钟,
输入rst\n,
输入[4:0]我的注册号,
输出寄存器chk
);
始终@(posedge clk或negedge rst_n)
开始
如果(!rst_n)开始
chk是的,@Morgan是正确的,当我合成以下代码时,Xillinx-ISE和Questasim也在这样做
module aa( input clk,
input rst_n,
input [4:0] my_reg,
output reg chk
);
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n) begin
chk <= 1'bz;
end else begin
if (my_reg) begin
chk <= 1'b1;
end
else begin
chk <= 1'b0;
end
end
end
endmodule
模块aa(输入时钟,
输入rst\n,
输入[4:0]我的注册号,
输出寄存器chk
);
始终@(posedge clk或negedge rst_n)
开始
如果(!rst_n)开始
chkVerilog的行为应该如下:
myreg | result | comment
------|--------|--------
0000 | 1'b0 | FALSE - all bit bits are zero
0010 | 1'b1 | TRUE - at least one bit is one
001X | 1'b1 | TRUE - at least one bit is one
000X | 1'bX | FALSE - we don't know whether all bits are zero or not
and if interprets 1'bX as FALSE
Verilog的行为应如下所示:
myreg | result | comment
------|--------|--------
0000 | 1'b0 | FALSE - all bit bits are zero
0010 | 1'b1 | TRUE - at least one bit is one
001X | 1'b1 | TRUE - at least one bit is one
000X | 1'bX | FALSE - we don't know whether all bits are zero or not
and if interprets 1'bX as FALSE
if(myreg)
与§12.4条件if–else语句中的if(myreg!=0)
相同
条件语句(或if–else语句)用于生成
关于是否执行语句的决定。从形式上讲,语法
在语法12-2中给出
conditional_statement ::= // from A.6.6
[ unique_priority ] if ( cond_predicate ) statement_or_null
{ else if ( cond_predicate ) statement_or_null }
[ else statement_or_null ]
unique_priority ::= unique | unique0 | priority
cond_predicate ::= expression_or_cond_pattern { &&& expression_or_cond_pattern }
expression_or_cond_pattern ::= expression | cond_pattern
cond_pattern ::= expression matches pattern
条件_语句::=//来自A.6.6
[unique_priority]if(cond_谓词)语句_或_null
{else if(cond_谓词)语句_或_null}
[else语句\u或\u null]
唯一|优先级::=唯一|唯一0 |优先级
条件谓词::=表达式或条件模式{&&表达式或条件模式}
表达式或第二种模式::=表达式第二种模式
条件模式::=表达式匹配模式
语法12-2-if–else语句的语法(摘自附录A)
如果cond_谓词表达式的计算结果为true(即,具有非零的已知值),则应执行第一条语句。如果计算结果为false(即,值为零值或值为x或z),则不应执行第一条语句。如果存在else语句且cond_谓词表达式为false,则应执行else语句。因为if表达式的数值被测试为零,所以某些快捷方式是可能的。例如,下面两条语句
表达同样的逻辑:
if(expression)
if(expression != 0)
if(表达式)
if(表达式!=0)
注意,LRM正在检查表达式是否为非零值。它不限制宽度,甚至不考虑它是否是有符号类型。负数为真,只有零为假
合成器可以进行位压缩,这是与零相比的等效逻辑。if(myreg)
根据§12.4条件if–else语句,与if(myreg!=0)
相同
条件语句(或if–else语句)用于生成
关于是否执行语句的决定。从形式上讲,语法
在语法12-2中给出
conditional_statement ::= // from A.6.6
[ unique_priority ] if ( cond_predicate ) statement_or_null
{ else if ( cond_predicate ) statement_or_null }
[ else statement_or_null ]
unique_priority ::= unique | unique0 | priority
cond_predicate ::= expression_or_cond_pattern { &&& expression_or_cond_pattern }
expression_or_cond_pattern ::= expression | cond_pattern
cond_pattern ::= expression matches pattern
条件_语句::=//来自A.6.6
[unique_priority]if(cond_谓词)语句_或_null
{else if(cond_谓词)语句_或_null}
[else语句\u或\u null]
唯一|优先级::=唯一|唯一0 |优先级
条件谓词::=表达式或条件模式{&&表达式或条件模式}
表达式或第二种模式::=表达式第二种模式
条件模式::=表达式匹配模式
语法12-2-if–else语句的语法(摘自附录A)
如果cond_谓词表达式的计算结果为true(即,具有非零的已知值),则应执行第一条语句。如果计算结果为false(即,值为零值或值为x或z),则不应执行第一条语句。如果存在else语句且cond_谓词表达式为false,则应执行else语句。因为if表达式的数值