|
发表于 2011-10-6 21:10:35
|
显示全部楼层
module SP ( clk, rst_n, idin,
dout0, dout1, dout2, dout3
);
input clk, rst_n;
input [7:0] idin;
output [7:0] dout0, dout1, dout2, dout3;
wire sp_done;
reg [1:0] cnt_n;
wire[1:0] cnt;
reg [7:0] dout_buf0, dout_buf1, dout_buf2, dout_buf3;
reg [7:0] dout0, dout1, dout2, dout3;
assign sp_done = (cnt_n == 'b11) ? 1 : 0;
always @ (posedge clk or negedge rst_n)
if (!rst_n )
cnt_n <= #1 2'b00;
else
cnt_n <= #1 cnt;
assign cnt = (cnt_n == 2'b11)?2'b00:cnt_n +1;
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
dout0 <= #1 0;
dout1 <= #1 0;
dout2 <= #1 0;
dout3 <= #1 0;
end
else if(sp_done)
begin
dout0 <= #1 dout_buf0;
dout1 <= #1 dout_buf1;
dout2 <= #1 dout_buf2;
dout3 <= #1 dout_buf3;
end
else
begin
dout0 <= #1 dout0;
dout1 <= #1 dout1;
dout2 <= #1 dout2;
dout3 <= #1 dout3;
end
end
always@(*)
case (cnt_n)
2'b00: dout_buf0 = idin;
2'b01: dout_buf1 = idin;
2'b10: dout_buf2 = idin;
2'b11: dout_buf3 = idin;
endcase
endmodule
|
|