Professional Documents
Culture Documents
// s y m b o l i c s t a t e d e c l a r a t i o n
local param [I : 01
zero = 2'b00, wait0 = 2'b01,
one = 2'b10, wait1 = 2'bll;
// s i g n a l d e c l a r a t i o n
reg [I: 0] state_reg , state_next ;
reg [N-1:0] q_reg;
wire [N-1: 01 q_next ;
wire q_zero;
reg q_load, q_dec;
Code with explicit data path components
// fsmd state & data registers
always @ ( posedge clk , posedge reset )
i f ( reset )
begin
s tate_reg <= zero ;
q_ reg <= 0 ;
end
e1se
begin
state_reg <= state_next ;
q_reg <= q_next ;
end
// status signal
assign q_zero = ( q_next ==0) ;
Code with explicit data path components
// FSMD control path next - state logic
always @*
begin
state_ next = state_reg ; // default state :
the same
q_ load = l ' b0 ; // default output : 0
q_dec = 1 'b0; // default output : 0
db_ tick = l ' b0 ; // default output : 0
// signal declaration
reg [N-1:0] q_ reg , q_ next ;
reg [ I : 0] state _reg , state _next ;
Code with implicit data path components
// body
// fsmd state & data registers
always @ (posedge clk, posedge reset )
i f ( reset )
begin
state_reg <= zero ;
q_reg <= 0 ;
end
else
begin
state_reg <= state_next ;
q_reg <= q_next ;
end
Code with implicit data path components
// next - state logic & data path functional units /
routing
always @ *
begin
state_next = state_reg ;
// default state: the same
q-next = q_reg ; // default q: unchnaged
db_tick = l' b0 ; // default output : 0
case ( state_reg )
zero :
begin
db - level = l ' b0 ;
if ( SW )
begin
state_next = wait l ;
q-next = {N{l'bl});
// load I ...1
end
end
Code with explicit data path components
wait1 :
begin
db_level = l ' b0 ;
if (SW)
begin
q-next = q_ reg - 1 ;
i f (q_next==0)
begin
state_next = one ;
db _tick = 1' bl ;
end
end
else // sw==0
state_next = zero ;
end
Code with explicit data path components
one :
begin
db-level = l’bl;
if (~SW)
begin
state-next = wait 0 ;
q-next = {N{l'bl));
// load I . . I
end
end
Code with explicit data path components
wait 0 :
begin
db-level = l’bl ;
if (~sw)
begin
q-next = q-reg
if ( q-next ==0)
state-next = zero;
end
else // sw==1
state-next = one ;
end
end case
End
endmodule