generate你会用吗?你会用吗?
在我们的FPGA设计中,常常会对某些信号进行多级的缓存或进行多级类似的操作,如果不采取适当的技巧,就
会是我们的设计代码变得冗余、不好维护。本文提出的generate将可以解决这个问题。
为了更加直观表现出使用generate的好处,接下来给出使用generate前后的代码描述。该设计实现的功能对信号dina进行20个
时钟周期的延时以及对信号dinb进行25个时钟周期的延时。没有使用generate时的Verilog HDL描述如下所示:
`timescale 1ns / 1ps
/*******************************************************
Author : CrazyBird
Filename : delay_tap.v
Data : 2015-4-26
Description : delay of signal
********************************************************/
module delay_tap(
sys_clk,
rst_n,
dina,
dinb,
douta,
doutb
);
// parameter define
parameter DELAY_TAP20 = 20;
parameter DELAY_TAP25 = 25;
// input/output define
input sys_clk;
input rst_n;
input dina;
input dinb;
output douta;
output doutb;
// delay 20 clock period of dina
reg [DELAY_TAP20-1:0] dina_buf;
always @(posedge sys_clk or negedge rst_n)
begin
if(rst_n==1'b0)
dina_buf <= {(DELAY_TAP20){1'b0}};
else
begin
dina_buf[ 0] <= dina;
dina_buf[ 1] <= dina_buf[ 0];
dina_buf[ 2] <= dina_buf[ 1];
dina_buf[ 3] <= dina_buf[ 2];
dina_buf[ 4] <= dina_buf[ 3];
dina_buf[ 5] <= dina_buf[ 4];
dina_buf[ 6] <= dina_buf[ 5];
dina_buf[ 7] <= dina_buf[ 6];
dina_buf[ 8] <= dina_buf[ 7];
dina_buf[ 9] <= dina_buf[ 8];
dina_buf[10] <= dina_buf[ 9];
dina_buf[11] <= dina_buf[10];
dina_buf[12] <= dina_buf[11];
dina_buf[13] <= dina_buf[12];
dina_buf[14] <= dina_buf[13];
dina_buf[15] <= dina_buf[14];
dina_buf[16] <= dina_buf[15];
dina_buf[17] <= dina_buf[16];
dina_buf[18] <= dina_buf[17];
dina_buf[19] <= dina_buf[18];
end
end
assign douta = dina_buf[DELAY_TAP20-1];
// delay 25 clock period of dina
reg [DELAY_TAP25-1:0] dinb_buf;
always @(posedge sys_clk or negedge rst_n)
begin
if(rst_n==1'b0)
dinb_buf <= {(DELAY_TAP25){1'b0}};
else
begin
评论0
最新资源