在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2908|回复: 7

[求助] 大学生作业 串行检测器 门级仿真波形出错

[复制链接]
发表于 2013-5-1 18:59:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我们的实验报告要求写一个串行检测器 当检测到1111四个1或者超过4个1以上的数列时就输出1 否则就输出0

图像中行为级4个1开始输出1 而门级三个1就开始输出1了 而且门级有延时 大概是7.85ns

因为我的确是初学者 所以很多东西真的不懂 还有望各位高手细心指点 小弟心存感激

(如果有人指点 需要的我我可以上传report)






  1. 2,verilog代码

  2. module Check1111(data,clk,clear,result);

  3.    input data,clk,clear;   //输入信号data,时钟clk,复位信号clear
  4.         output result;          //输出信号result
  5.         reg x,result;           //变量寄存器x,输出变量寄存器result
  6.         reg [1:0] state;        //二位状态寄存器
  7.         reg [1:0] next_state;   //二位下一刻状态寄存器
  8.        
  9.         parameter S0=2'b00,     //为状态机的四个状态编码
  10.                   S1=2'b01,
  11.                                  S2=2'b10,
  12.                                  S3=2'b11;
  13.                                  
  14.         always@(posedge clk or posedge clear)
  15.            if(clear)
  16.              state <= S0;               //复位信号到来 状态赋值到SO初始状态
  17.            else
  18.              state <= next_state;       //时钟信号到来 将下一刻的状态赋值到当前状态
  19.    
  20.    always@(state or data)      //状态或数据流变化时
  21.                
  22.                          x = data;            //将data赋值到寄存器x
  23.                          
  24.         always@(state or x)         //状态或寄存器x变化时
  25.      begin
  26.                
  27.                 case(state)                       
  28.          S0 : if(x==1)
  29.                  begin               //若x检测到1,跳到状态S1,result输出0
  30.                                             next_state = S1;                       
  31.                         result=0;
  32.                                           end
  33.                                   
  34.                                   else
  35.                 begin                //若x检测到0,跳到状态S0,result输出0
  36.                                             next_state = S0;                       
  37.                         result=0;
  38.                                           end
  39.                        
  40.                         S1 : if(x==1)
  41.                  begin               //若x检测到1,跳到状态S2,result输出0
  42.                                             next_state = S2;                       
  43.                         result=0;
  44.                                           end
  45.                                   
  46.                                   else
  47.                 begin
  48.                                             next_state = S0;         //若x检测到0,跳到状态S0,result输出0               
  49.                         result=0;
  50.                                           end                  
  51.                        
  52.                         S2 : if(x==1)               
  53.                  begin               //若x检测到1,跳到状态S3,result输出0
  54.                                             next_state = S3;                       
  55.                         result=0;
  56.                                           end
  57.                                   
  58.                                   else
  59.                 begin                //若x检测到0,跳到状态S0,result输出0
  60.                                             next_state = S0;                       
  61.                         result=0;
  62.                                           end                  
  63.                                           
  64.                    S3 : if(x==1)
  65.                  begin               //若x检测到1,跳到状态S3,result输出1
  66.                                             next_state = S3;                       
  67.                         result=1;
  68.                                           end
  69.                                   
  70.                                   else
  71.                 begin                //若x检测到0,跳到状态S0,result输出0
  72.                                             next_state = S0;                       
  73.                         result=0;
  74.                                           end       
  75.         default : next_state = S0;   //默认的状态为S0
  76.                   endcase
  77.         end
  78.                                                            


  79. endmodule

  80. 3,仿真代码

  81. `timescale 1ns / 1ps

  82. module test_for_check1111;

  83.         // Inputs
  84.         reg data;
  85.         reg clk;
  86.         reg clear;

  87.         // Outputs
  88.         wire result;

  89.         // Instantiate the Unit Under Test (UUT)
  90.         Check1111 uut (
  91.                 .data(data),
  92.                 .clk(clk),
  93.                 .clear(clear),
  94.                 .result(result)
  95.         );

  96.         initial
  97.           begin
  98.                 // Initialize Inputs
  99.                 data = 0;               //信号赋初值
  100.                 clk = 0;
  101.                 clear = 0;
  102.       
  103.                 forever #100 clk = ~clk;  //设置一个5M时钟
  104.                
  105.      end
  106.                
  107.         initial
  108.       begin       
  109.                   #50 clear = ~clear;    //在开始的时候复位端有效一次使电路赋初值
  110.                   #50 clear = ~clear;
  111.                                
  112.                         @(posedge clk)data = 1;  //在时钟上升沿到来的时候提供一段数据流
  113.                         @(posedge clk)data = 1;
  114.                    @(posedge clk)data = 1;
  115.                         @(posedge clk)data = 1;
  116.                         @(posedge clk)data = 1;
  117.                         @(posedge clk)data = 1;
  118.                    @(posedge clk)data = 1;
  119.                         @(posedge clk)data = 0;
  120.                         @(posedge clk)data = 1;
  121.                         @(posedge clk)data = 1;
  122.                    @(posedge clk)data = 1;
  123.                         @(posedge clk)data = 0;
  124.                        
  125.                         $stop;
  126.         end
  127.       
  128. endmodule



复制代码

行为级仿真

行为级仿真

门级仿真

门级仿真

门级仿真的延时

门级仿真的延时
 楼主| 发表于 2013-5-1 20:29:21 | 显示全部楼层
难道就没人帮助一下吗T^T
发表于 2013-5-1 22:29:59 | 显示全部楼层
状态机编码建议使用one-hot编码
即:
S1 = 0001
S2 = 0010
S3 = 0100
S4 = 1000

然后你正好可以吧S4的最高位作为输出~
发表于 2013-5-1 22:48:17 | 显示全部楼层
用一段式可能好点这里
发表于 2013-5-2 01:15:38 | 显示全部楼层
可以试下用移位寄存器做
reg [3:0] a;
a <= {din, a[3:1]}
wire result = (a==4'hf);
发表于 2013-5-6 11:56:09 | 显示全部楼层
1.截图不截信号名称.......谁知道什么是什么......
2.截图和代码对不上.........你5m的时钟在哪里,只看到一个周期20ns的东西不知道是什么......你两个50ns的clear自反复位在哪里?只看到一个10ns的X和一个10ns的脉冲.....

在逻辑上,仿真结果与你的代码是符合的,没问题
state进入s3状态,到result输出是组合逻辑,必然少一个节拍
既然自称初学,用不好二段式的组合逻辑开节点,还是先老老实实先换一三段吧...........
发表于 2013-5-6 13:32:55 | 显示全部楼层
回复 6# vongy


   支持这个方法,简单直接
发表于 2013-5-6 15:20:50 | 显示全部楼层
6L的是不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 01:53 , Processed in 0.026068 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表