Board logo

标题: 麻烦大家帮我看看这段代码为什么不发生状态切换??? [打印本页]

作者: mage1982    时间: 2006-5-25 23:29     标题: 麻烦大家帮我看看这段代码为什么不发生状态切换???

这几天连续睡眠不足,实在看花眼了。


这段代码就是无法切换状态


麻烦帮我看看为什么进不到状态机里!!


module Controller(
 //Inputs
 reset,
 clock_488,
 frame_synch,


 //Outputs
 frame_load, //for Mux
 shift,      //for Mux and shift register


 load,       //for 8bit register
 demux_sel,   //for Demux
 data_out_enb     //for Demux
 );


input reset, clock_488, frame_synch;


output frame_load, shift;
reg frame_load, shift;


output load;
reg load;


output [4:0] demux_sel;
reg [4:0] demux_sel;


output data_out_enb;
reg data_out_enb;


parameter S_idle = 4'b0001, S_sampling = 4'b0010, S_shifting = 4'b0100, S_dout = 4'b1000;


reg [3:0] state, next_state;
reg [2:0] ld_counter;
reg [7:0] sft_counter;


 


/*frame_synch or*/
always @(state) begin
   case(state)
  S_idle:
   begin
            frame_load = 0;
            load = 0;
            data_out_enb = 0;      
    ld_counter = 0;
    sft_counter = 0;
    shift = 0;
    if(frame_synch)
     next_state = S_sampling;
    else
     next_state = S_idle;
   end
  S_sampling:  //就是进不去这里啊!!!波形激励都没问题啊!!!!!!
   begin
    frame_load = 1;
    next_state = S_shifting;
   end
  S_shifting:
   begin
    shift = 1; //2 fanout, 1 for Mux , other for shiftRegister
    demux_sel = sft_counter / 8; //decide which output tunnel is selected


    //when the shift register is full, load it to the holding register
    if(ld_counter == 7)
     load = 1; //when load is set, the data is held into register and output to registers
         // of Demux according to demux_sel
    else
     load = 0;
     
     
    ld_counter = ld_counter + 3'b001;
    //when the whole 256bit data was transported over, then begin next state
    if(sft_counter == 255)
     next_state = S_dout;
    else
     next_state = S_shifting;
     
     sft_counter = sft_counter + 8'h01;     
   end
  S_dout:
   begin
    shift = 0;
    data_out_enb = 1;
    next_state = S_idle;
   end
  default:
    next_state = S_idle;   
 endcase
end
 /*or posedge frame_synch*/
always @(posedge clock_488 or posedge reset) begin
 if(reset)
  state <= S_idle; 
 else
  state <= next_state;  //按说这句执行以后就可以跳进上面的状态机了,但是就是不进去!
end   
endmodule

[此贴子已经被作者于2006-5-25 23:29:45编辑过]


作者: waterlily    时间: 2006-5-26 13:21

感觉程序没问题啊,你说"//就是进不去这里啊!!!波形激励都没问题啊!!!!!!"。如果波形仿真没问题的话,是不是输入信号frame_synch的问题?


作者: waterlily    时间: 2006-5-26 13:55

一直用VHDL,不知道always ·(state) begin 这样写对不对
作者: kzw    时间: 2006-5-26 22:02

可以进入的阿,我仿真的波形。
作者: kzw    时间: 2006-5-26 22:08

我仿真可以得,但是我传图几次都没有成功。
作者: kzw    时间: 2006-5-26 22:08

这样的状态跳转不可能不可以得。
作者: mage1982    时间: 2006-5-26 23:08

不会吧。。。。
ModalSim6.1d ModalSim6.1b
都试过了。。。。。。
作者: kzw    时间: 2006-5-29 10:49

直接下到芯片里面吧。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0