www.pudn.com > encode.rar > encode.v
module encode(sample_clk,
syn_global_reset,
send,
stop_encode,
q_from_crc,
q_from_shiftreg,
ena_crc_send,
ena_regs_send,
qout_encode,
data_shift_encode);
//recent modification:4/14
//output ports modified to internal ports:state,nextstate
input sample_clk;
input syn_global_reset;
input send;
input stop_encode;
input q_from_crc;
input q_from_shiftreg;
input ena_crc_send;
input ena_regs_send;
output qout_encode;
reg qout_encode;
reg [3:1] state;
reg [3:1] nextstate;
output data_shift_encode;
parameter S1=3'b000,
S2=3'b001,
S3=3'b010,
S4=3'b011,
Wait=3'b100;
assign data_shift_encode=(state==S1)||(state==S4);
wire qin_encode;
assign qin_encode=(ena_regs_send)?q_from_shiftreg:
(ena_crc_send)?(~q_from_crc):1'b?;
always @(posedge sample_clk)
begin
if(syn_global_reset)
begin
state<=Wait;
end
else
begin
state<=nextstate;
end
end
always@(state or qin_encode or send or stop_encode )
begin
case(state)
S1:begin
if(qin_encode==1'b0)
begin
nextstate<=S2;
end
else
begin
nextstate<=S3;
end
end
S2:begin
if(stop_encode)
begin
nextstate<=Wait;
end
else
begin
nextstate<=S1;
end
end
S3:begin
if(stop_encode)
begin
nextstate<=Wait;
end
else
begin
nextstate<=S4;
end
end
S4:begin
if(qin_encode==1'b0)
begin
nextstate<=S3;
end
else
begin
nextstate<=S2;
end
end
Wait:begin
if(send)
begin
nextstate<=S1;
end
else
begin
nextstate<=Wait;
end
end
default:begin
nextstate<=Wait;
end
endcase
end
always@(state)
begin
case(state)
S1:begin
qout_encode<=1'b0;
end
S2:begin
qout_encode<=1'b1;
end
S3:begin
qout_encode<=1'b0;
end
S4:begin
qout_encode<=1'b1;
end
Wait:begin
qout_encode<=1'b0;
end
default:begin
qout_encode<=1'b0;
end
endcase
end
endmodule