Their was a requirement to develop a script to add pragma to the code in order to encrypt the source code.We need to add `protect begin and `protect end between module and end module of .v files.
Original .v file:
module chip( MINUS,PLUS );
output wreal PLUS;
input wreal MINUS;
parameter elite = 0;
parameter coffee = 1;
parameter club = 1;
always@(*)
begin
$display("elite = %d" , elite );
$display("coffee = %d" , coffee);
$display("club = %d" , club );
end
endmodule
// comments
// parameter
Output .v file:
module chip( MINUS,PLUS );
output wreal PLUS;
input wreal MINUS;
parameter elite = 0;
parameter coffee = 1;
parameter club = 1;
`protect begin
always@(*)
begin
$display("elite = %d" , elite );
$display("coffee = %d" , coffee);
$display("club = %d" , club );
end
`protect end
endmodule
// comments
// parameter
The script was written in cshell as stated below
#! /bin/csh -fx
setenv RUN_DIR $PWD
set filename = $RUN_DIR/test_list.txt # test_list.txt gives list of all .v files
set temp = temp # temp variable
set file = file # file variable
foreach filelocal (`cat $filename`) # foreach is reading each file in test_list
echo $filelocal
# Removing Tempfiles
rm -rf $file$temp # Removing temporary in between generated files
rm -rf $file
# Removing comments in the file
cat $filelocal | sed 's/\/\/.*$//' > $file # Making sure to remove all comment " // " lines from the orginal .v file ($filelocal) and piping to a temporary file ($file)
#Counting total lines of the file
set count = `cat $file | wc -l` # counting the entire lines of the file ($file)
# Finding the last line for the grep item
set final = `grep -n "input\|output\|parameter\|inout" $file | sed 's/:/ /g' | awk '{print $1}' | tail -n 1 ` # Here we are greping the various fields as stated , here up to parameter and finding the line number
echo $final
head -$final $file > $file$temp # Then we are sending the contents of the lines up to the parameter to a new file
echo \`protect begin >> $file$temp # Then printing the `protect begin to the new file
# Finding the last line for the grep item
set end = `grep -n "endmodule" $file | sed 's/:/ /g' | awk '{print $1}' | tail -n 1 ` # Finding the endmodule line here
echo $end
# printing between Lines
set final = `expr $final + 1`
set end = `expr $end - 1`
sed -n $final,{$end}p $file >> $file$temp # Printing all the lines between after parameter last line to endmoule before line
echo \`protect end >> $file$temp # Printing the `protect end
echo endmodule >> $file$temp # Printing endmodule
#printing end lines
set end = `grep -n "endmodule" $file | sed 's/:/ /g' | awk '{print $1}' | tail -n 1 `
set rem = `expr $count - $end`
tail -$rem $file >> $file$temp # Printing the ending lines after endmdule
# Copying the local file to orginal file
cp -rf $file$temp $filelocal # Copying the temporary file back to original file
end
Thanks for reading this post ..!