TMRG blocking procedural assingment
Summary
In https://gitlab.cern.ch/cmshgcalasic/econd_rtl/-/issues/500 it was discovered that or-reduction is not correctly triplicated by TMRG.
Describe your setup
econd_rtl repo
TMRG Version
Commit e8dc6aeb
Steps to reproduce
Triplicate code containing (testcase to be created)
always_comb // Reg_Data_In
begin
Reg_Data_In = '0;
for (int k = 0; k <= 47; k++)
begin
Reg_Data_In |= Demux_Out[k*768+:768];
end
end
What is the current bug behaviour?
The output of tmrg is (|
is missing for *A
,*B
,*C
)
always_comb
begin
Reg_Data_InA = '0;
for(int kA = 0;kA<=47;kA ++)
begin
Reg_Data_InA = Demux_OutA[kA*768+:768] ;
end
end
What is the expected correct behaviour?
The output of tmrg should be (for *A
,*B
,*C
)
always_comb
begin
Reg_Data_InA = '0;
for(int kA = 0;kA<=47;kA ++)
begin
Reg_Data_InA |= Demux_OutA[kA*768+:768] ;
end
end
Reference and screenshot
LRM (IEEE1800-2009) section 10.4.1, Syntax 10-2
Possible fixes
- TBD