[CPLD] 一个简单的CPLD程序仿真出现了问题,求教!

[复制链接]
2005|8
 楼主| okdsnvoief 发表于 2017-1-14 17:03 | 显示全部楼层 |阅读模式
module test02(clk,rst,count,clk_odd);
input clk,rst;
output reg [1:0]clk_odd;  
output[3:0] count;
reg[3:0] count;
parameter N = 2;                 
always @ (posedge clk)
if(! rst)
begin
count <= 1'b0;
clk_odd <= 1'b0;
end
else
if ( count < N)
begin
count <= count + 1'b1;
end

else
    case(count)
           4'b0001:
                begin
                clk_odd <= clk_odd + 1'b1;
                end
               
                4'b0010:
                begin
                count <= 1'b0;
      clk_odd <= clk_odd + 1'b1;
                end       
                endcase
endmodule

上面的程序仿真发现无法执行 count == 1 的情况,clk_odd都是在 count == 2之后才变化,在count == 1时波形没变化,请问是哪里出问题了?
我在下面会贴出testbench代码及仿真波形
 楼主| okdsnvoief 发表于 2017-1-14 17:07 | 显示全部楼层
下面是testbeach代码:

`timescale 100 ps/ 1 ps
module test02_vlg_tst();
// constants                                          
// general purpose registers
//reg eachvec;
// test vector input registers
reg clk;
reg rst;
// wires                                               
wire [1:0]clk_odd;
wire [3:0]  count;

// assign statements (if any)                          
test02 i1 (
// port map - connection between master ports and signals/registers   
        .clk(clk),
        .clk_odd(clk_odd),
        .count(count),
        .rst(rst)
);
initial                                                
begin   
rst = 0;
clk = 0;

#200 rst = 1;                                                
// code that executes only once                        
// insert code here --> begin                          
                                                      
// --> end                                             
//$display("Running testbench");                       
end                                                   
always                                                
// optional sensitivity list                           
// @(event1 or event2 or .... eventn)                  
begin        
#50 clk = ~clk;                              
// code executes for every event on sensitivity list   
// insert code here --> begin                          
                                                      
//@eachvec;                                             
// --> end                                             
end                                                   
endmodule

 楼主| okdsnvoief 发表于 2017-1-14 17:08 | 显示全部楼层
抱歉,我这里无法上传图片。波形都是在 count == 2时发生的翻转。count == 1时波形吴变化
 楼主| okdsnvoief 发表于 2017-1-14 17:09 | 显示全部楼层
这是仿真波形

本帖子中包含更多资源

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

×
 楼主| okdsnvoief 发表于 2017-1-14 17:13 | 显示全部楼层
 楼主| okdsnvoief 发表于 2017-1-14 17:17 | 显示全部楼层
不能沉
nethopper 发表于 2017-1-14 19:53 | 显示全部楼层
count等于1时执行的是:
if ( count < N)
    begin
         count <= count + 1'b1;
    end

没执行后面的CASE语句
玄德 发表于 2017-1-15 12:08 | 显示全部楼层
if    ( count < 2 )
     {  .......   }
else
     {
     if   ( count == 1  )
          {  ......  }
     if   ( count == 2  )
          {  .....  }
      }



 楼主| okdsnvoief 发表于 2017-1-16 09:11 | 显示全部楼层
nethopper 发表于 2017-1-14 19:53
count等于1时执行的是:
if ( count < N)
    begin

恍然大悟,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部