|
发表于 2008-5-26 13:22:42
|
显示全部楼层
/***************************************
简单的例子,仅供参考
楼上的说对,写漏了些东西,
改一改哈
***************************************/
`define data_width 32
`define right_shift
module example(
data_out,
dout_en,
data_in,
data_wr,
clk,
rst_n
);
//=============================
//ports declaration
//=============================
output[`data_width -1 : 0] data_out;
output dout_en;
input data_in;
input data_wr;
input clk;
input rst_n;
//=============================
//parameter declaration
//=============================
parameter UDLY = 1;
//=============================
//signals declaration
//=============================
reg[`data_width -1 : 0] shift_reg;
reg[`data_width -1 : 0] shift_cnt;
wire shift_done;
wire dout_en;
//=============================
//main code
//=============================
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
shift_reg <= {`data_width{1'b0}};
else if(data_wr)
`ifdef right_shift
shift_reg <= #UDLY {data_in,shift_reg[`data_width -1 : 1]};
`else
shift_reg <= #UDLY {shift_reg[`data_width -2 : 0],data_in};
`endif
end
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
shift_cnt <= {`data_width{1'b0}};
else if(shift_done)
shift_cnt <= #UDLY {`data_width{1'b0}};
else if(data_wr)
shift_cnt <= shift_cnt + 1'b1;
end
assign shift_done = (shift_cnt == `data_width);
assign dout_en = shift_done;
assign data_out = shift_reg;
//================================code end=================================
endmodule |
|