TA的每日心情 | 难过 2018-8-25 09:43 |
---|
初级会员
- 积分
- 199
|
本帖最后由 Deer-菜籽 于 2018-6-28 20:16 编辑
在自己尝试写FSM识别“Welcome”的例程里面,成功编译,但是在modelsim仿真里出现错误。
自己找了好久实在没找出来是哪里的问题。(以小梅哥的代码结构为基准去修改,一行一行对照后依然没发现问题所在。
具体问题表现见图
(testbench 所给序列为 WelWelejklWelcomeqwerWElcomWelConwelcomeWelcomWelcomezxcvbmqasdv
(检测序列为 Welcome
1.FSM的state停在了4‘d0001 且再无变化
2.当检测到第三个字符“l”时应为 4’0011 ,仿真显示为 4‘d0001
3.当检测到第二个字符为“e”时state变为 4’d0010,此时依testbench所写应对 data_tmp 进行左移 ,data 应为下一字符 “l”,而仿真显示仍未 “e”
希望大大看到能帮忙分析回复
刚开始重新学verilog,小白问题还请见谅
FSM代码
Testbench代码
- `timescale 1ns/1ns
- `define timeperiod 20
- module FSM_tb;
- reg clk_t;
- reg rst_n_t;
- reg dv_t;
- wire [3:0]state_t;
- wire [2:0]cnt_t;
- wire [7:0]data_t;
- wire [511:0] data_tmp;
- assign data_tmp = "WelWelejklWelcomeqwerWElcomWelConwelcomeWelcomWelcomezxcvbmqasdv";
- reg [511:0] reg_tmp;
- always@(posedge clk_t or negedge rst_n_t)
- if(!rst_n_t)
- reg_tmp <= 0;
- else if (dv_t)
- reg_tmp <= (data_tmp << 8) ;
- else
- reg_tmp <= data_tmp;
- assign data_t = reg_tmp[511:504];
- FSM FSM_1(
- .clk(clk_t),
- .rst_n(rst_n_t),
- .dv(dv_t),
- .data(data_t),
- .cnt(cnt_t),
- .state(state_t)
- );
- initial clk_t = 0;
- always #(`timeperiod/2) clk_t = ~clk_t;
- initial begin
- rst_n_t = 0;
- dv_t = 0;
- #(`timeperiod*10)
- rst_n_t = 1;
- #(`timeperiod*10)
- dv_t = 1;
- #(`timeperiod*64)
- #2000;
- $stop;
- end
- endmodule
复制代码
|
|