Partha Mukherjee
Newbie level 4
while synthesizing the register file unit for ADSP 21020 I found that synthesis takes exponential amount of time... I try to found in which part this mess occurs and find that while taking the REGISTER WRITE part along with REGISTER READ and TRI STATE BUFFER etc for synthesis. The Verilog code of write part is as follows :
. ...............
Here alternate_regfile and primary_regfile are two 'reg' variables (each indicates 16 registers of 40 bit each) declared as
reg [39:0] primary_regfile [3:0]; // primary register file
reg [39:0] alternate_regfile [3:0]; //secondary register file
input [39: 0] data_in1,
input [3:0] addr1_w // 4 bit address selection input to select register number
// from 0 to 15 for writing.
input srrfl and srrfh are two input flags to select frist half (0 to 7) or second half
(8 to 15) of primary/ secondary register file.
input wr1 //input signal to enable write in primary_regfile[addr1_w] or
alternate_regfile[addr1_w] . (register from 0 to 15)
There are five such blocks (as register file unit interacts with data and program memory buses and other computational unit such as ALU/shifter etc..)..
after implementing the first block I come to the following problems:
1. Found area constraint ratio of 100 (+ 5) on block register_file, actual ratio is 15.
2. INFO:Xst:738 - HDL ADVISOR - 640 flip-flops were inferred for signal <alternate_regfile>. You may be trying to describe a RAM in a way that is incompatible with block and distributed RAM resources available on Xilinx devices, or with a specific template that is not supported.
INFO:Xst:738 - HDL ADVISOR - 640 flip-flops were inferred for signal <primary_regfile>. You may be trying to describe a RAM in a way that is incompatible with block and distributed RAM resources available on Xilinx devices, or with a specific template that is not supported.
3.Number of bonded IOBs: 411 out of 408 100% > 100% of resource.
While implementing the second such block (addr2 and addr2_w) synthesis takes exponential time..... please help how should I restructure the code.
I am working on XCV1000-6bg560.
Code:
always @(posedge clk)
begin
if(wr1)
begin
if(addr1_w < 8)
begin
if(srrfl)
alternate_regfile[addr1_w] <= data_in1;
else
primary_regfile[addr1_w] <= data_in1;
end
else if(addr1_w < 16 && addr1_w >= 8)
begin
if(srrfh)
alternate_regfile[addr1_w] <= data_in1;
else
primary_regfile[addr1_w] <= data_in1;
end
else
$display("Invalid Register Number");
end
Here alternate_regfile and primary_regfile are two 'reg' variables (each indicates 16 registers of 40 bit each) declared as
reg [39:0] primary_regfile [3:0]; // primary register file
reg [39:0] alternate_regfile [3:0]; //secondary register file
input [39: 0] data_in1,
input [3:0] addr1_w // 4 bit address selection input to select register number
// from 0 to 15 for writing.
input srrfl and srrfh are two input flags to select frist half (0 to 7) or second half
(8 to 15) of primary/ secondary register file.
input wr1 //input signal to enable write in primary_regfile[addr1_w] or
alternate_regfile[addr1_w] . (register from 0 to 15)
There are five such blocks (as register file unit interacts with data and program memory buses and other computational unit such as ALU/shifter etc..)..
after implementing the first block I come to the following problems:
1. Found area constraint ratio of 100 (+ 5) on block register_file, actual ratio is 15.
2. INFO:Xst:738 - HDL ADVISOR - 640 flip-flops were inferred for signal <alternate_regfile>. You may be trying to describe a RAM in a way that is incompatible with block and distributed RAM resources available on Xilinx devices, or with a specific template that is not supported.
INFO:Xst:738 - HDL ADVISOR - 640 flip-flops were inferred for signal <primary_regfile>. You may be trying to describe a RAM in a way that is incompatible with block and distributed RAM resources available on Xilinx devices, or with a specific template that is not supported.
3.Number of bonded IOBs: 411 out of 408 100% > 100% of resource.
While implementing the second such block (addr2 and addr2_w) synthesis takes exponential time..... please help how should I restructure the code.
I am working on XCV1000-6bg560.