Write verilog escape (#394)
* Fir for write_verilog issue 3826 Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com> * staToVerilog2 remove escaped_name+=ch Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com> * updated regression to remove \ from module name Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com> * Using helpers.tcl function to redirect results Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com> * add std::string and remove trailing space, update regression name Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com> * update regression to reflect correct output verilog name Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com> --------- Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
This commit is contained in:
parent
73e1a392c5
commit
eb0446d4e2
|
|
@ -86,15 +86,12 @@ staToVerilog(const char *sta_name)
|
||||||
for (const char *s = sta_name; *s ; s++) {
|
for (const char *s = sta_name; *s ; s++) {
|
||||||
char ch = s[0];
|
char ch = s[0];
|
||||||
if (ch == verilog_escape) {
|
if (ch == verilog_escape) {
|
||||||
|
escaped = true;
|
||||||
char next_ch = s[1];
|
char next_ch = s[1];
|
||||||
if (next_ch == verilog_escape) {
|
if (next_ch == verilog_escape) {
|
||||||
escaped_name += ch;
|
|
||||||
escaped_name += next_ch;
|
escaped_name += next_ch;
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
// Skip escape.
|
|
||||||
escaped = true;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if ((!(isalnum(ch) || ch == '_')))
|
if ((!(isalnum(ch) || ch == '_')))
|
||||||
|
|
@ -124,15 +121,12 @@ staToVerilog2(const char *sta_name)
|
||||||
for (const char *s = sta_name; *s ; s++) {
|
for (const char *s = sta_name; *s ; s++) {
|
||||||
char ch = s[0];
|
char ch = s[0];
|
||||||
if (ch == verilog_escape) {
|
if (ch == verilog_escape) {
|
||||||
|
escaped = true;
|
||||||
char next_ch = s[1];
|
char next_ch = s[1];
|
||||||
if (next_ch == verilog_escape) {
|
if (next_ch == verilog_escape) {
|
||||||
escaped_name += ch;
|
|
||||||
escaped_name += next_ch;
|
escaped_name += next_ch;
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
// Skip escape.
|
|
||||||
escaped = true;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bool is_brkt = (ch == bus_brkt_left || ch == bus_brkt_right);
|
bool is_brkt = (ch == bus_brkt_left || ch == bus_brkt_right);
|
||||||
|
|
|
||||||
|
|
@ -165,6 +165,7 @@ record_public_tests {
|
||||||
suppress_msg
|
suppress_msg
|
||||||
verilog_attribute
|
verilog_attribute
|
||||||
verilog_specify
|
verilog_specify
|
||||||
|
verilog_write_escape
|
||||||
}
|
}
|
||||||
|
|
||||||
define_test_group fast [group_tests all]
|
define_test_group fast [group_tests all]
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
module multi_sink (clk);
|
||||||
|
input clk;
|
||||||
|
|
||||||
|
wire \alu_adder_result_ex[0] ;
|
||||||
|
|
||||||
|
hier_block \h1\x (.childclk(clk),
|
||||||
|
.\Y[2:1] ({\alu_adder_result_ex[0] ,
|
||||||
|
\alu_adder_result_ex[0] }));
|
||||||
|
endmodule
|
||||||
|
module hier_block (childclk,
|
||||||
|
\Y[2:1] );
|
||||||
|
input childclk;
|
||||||
|
output [1:0] \Y[2:1] ;
|
||||||
|
|
||||||
|
|
||||||
|
BUFx2_ASAP7_75t_R \abuf_$100 (.A(childclk));
|
||||||
|
BUFx2_ASAP7_75t_R \ff0/name (.A(childclk));
|
||||||
|
endmodule
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
# Check if "h1\x" and \Y[2:1] are correctly processed from input to output of Verilog
|
||||||
|
source helpers.tcl
|
||||||
|
read_liberty gf180mcu_sram.lib.gz
|
||||||
|
read_liberty asap7_small.lib.gz
|
||||||
|
read_verilog verilog_write_escape.v
|
||||||
|
link_design multi_sink
|
||||||
|
set verilog_file [make_result_file "verilog_write_escape.v"]
|
||||||
|
write_verilog $verilog_file
|
||||||
|
report_file $verilog_file
|
||||||
|
read_verilog $verilog_file
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
module multi_sink (clk);
|
||||||
|
input clk;
|
||||||
|
wire \alu_adder_result_ex[0] ;
|
||||||
|
\hier_block \h1\x (.childclk(clk), .\Y[2:1] ({ \alu_adder_result_ex[0] , \alu_adder_result_ex[0] }) );
|
||||||
|
endmodule // multi_sink
|
||||||
|
|
||||||
|
module hier_block (childclk, \Y[2:1] );
|
||||||
|
input childclk;
|
||||||
|
output [1:0] \Y[2:1] ;
|
||||||
|
wire [1:0] \Y[2:1] ;
|
||||||
|
BUFx2_ASAP7_75t_R \abuf_$100 (.A(childclk));
|
||||||
|
BUFx2_ASAP7_75t_R \ff0/name (.A(childclk));
|
||||||
|
endmodule // hier_block1
|
||||||
|
|
@ -386,7 +386,8 @@ VerilogWriter::writeInstBusPin(const Instance *inst,
|
||||||
if (!first_port)
|
if (!first_port)
|
||||||
fprintf(stream_, ",\n ");
|
fprintf(stream_, ",\n ");
|
||||||
|
|
||||||
fprintf(stream_, ".%s({", network_->name(port));
|
std::string port_vname = portVerilogName(network_->name(port));
|
||||||
|
fprintf(stream_, ".%s({", port_vname.c_str());
|
||||||
first_port = false;
|
first_port = false;
|
||||||
bool first_member = true;
|
bool first_member = true;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue