Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

How to simplify this code (verilog) ?

Status
Not open for further replies.

agrey

Newbie level 4
Joined
Jan 26, 2005
Messages
6
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
56
verilog always @ (posedge clk or posedge )

Dear all,
I'm writing a 8-bit register with different reset bit. I try to rewite it by using for loop expression but the dc synthesis result is not the same as these two code.
Could someone kindly help me on it ? Thanks a lot.

Below is my rtl code:
module test(sw_rst, wr_en, out, data ,rst, clk);

input wr_en; // write enable
input rst; // global reset
input clk;
input [7:0] sw_rst; // software reset
input [7:0] data;

output [7:0] out;

reg [7:0] out;

always @(posedge clk or posedge rst)
if (rst) out[0] <= #1 1'b0;
else if (sw_rst[0]) out[0] <= #1 1'b0;
else if (wr_en) out[0] <= #1 data[0];

always @(posedge clk or posedge rst)
if (rst) out[1] <= #1 1'b0;
else if (sw_rst[1]) out[1] <= #1 1'b0;
else if (wr_en) out[1] <= #1 data[1];

always @(posedge clk or posedge rst)
if (rst) out[2] <= #1 1'b0;
else if (sw_rst[2]) out[2] <= #1 1'b0;
else if (wr_en) out[2] <= #1 data[2];

always @(posedge clk or posedge rst)
if (rst) out[3] <= #1 1'b0;
else if (sw_rst[3]) out[3] <= #1 1'b0;
else if (wr_en) out[3] <= #1 data[3];

always @(posedge clk or posedge rst)
if (rst) out[4] <= #1 1'b0;
else if (sw_rst[4]) out[4] <= #1 1'b0;
else if (wr_en) out[4] <= #1 data[4];

always @(posedge clk or posedge rst)
if (rst) out[5] <= #1 1'b0;
else if (sw_rst[5]) out[5] <= #1 1'b0;
else if (wr_en) out[5] <= #1 data[5];

always @(posedge clk or posedge rst)
if (rst) out[6] <= #1 1'b0;
else if (sw_rst[6]) out[6] <= #1 1'b0;
else if (wr_en) out[6] <= #1 data[6];


always @(posedge clk or posedge rst)
if (rst) out[7] <= #1 1'b0;
else if (sw_rst[7]) out[7] <= #1 1'b0;
else if (wr_en) out[7] <= #1 data[7];

endmodule
 

Code:
module test(sw_rst, wr_en, data_out, data_in ,rst, clk);

input wr_en; // write enable
input rst; // global reset
input clk;
input [7:0] sw_rst; // software reset
input [7:0] data_in;

output [7:0] data_out;

wire [7:0] data_out;

genvar i;
generate
for(i=0;i< 8;i=i+1)
begin
flop flop_inst 
(
                        .clk(clk),
                        .rst(rst),
                        .sw_rst(sw_rst[i]),
                        .wr_en(wr_en),
                        .data_in(data_in[i]),
                        .data_out(data_out[i]) 
);

end
endgenerate

endmodule

module flop(sw_rst, wr_en, data_out, data_in ,rst, clk);

input wr_en; // write enable
input rst; // global reset
input clk;
input sw_rst; // software reset
input data_in;

output data_out;

reg data_out;

always @(posedge clk or posedge rst)
if (rst) data_out <= #1 1'b0;
else if (sw_rst) data_out <= #1 1'b0;
else if (wr_en) data_out <= #1 data_in; 

endmodule
 

    agrey

    Points: 2
    Helpful Answer Positive Rating
Dear dcreddy1980:

Thanks your help . But I need to modify it to run dc. ^^

Original :
for(i=0;i< 8;i=i+1)
begin
flop flop_inst
.........

Revised:
for(i=0;i< 8;i=i+1)
begin : flop_name
flop flop_inst
.........
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top