打印
[CPLD]

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

[复制链接]
1605|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
这是仿真波形

仿真波形.jpg (64.57 KB )

仿真波形.jpg

使用特权

评论回复
5
okdsnvoief|  楼主 | 2017-1-14 17:13 | 只看该作者
自顶

使用特权

评论回复
6
okdsnvoief|  楼主 | 2017-1-14 17:17 | 只看该作者
不能沉

使用特权

评论回复
7
nethopper| | 2017-1-14 19:53 | 只看该作者
count等于1时执行的是:
if ( count < N)
    begin
         count <= count + 1'b1;
    end

没执行后面的CASE语句

使用特权

评论回复
8
玄德| | 2017-1-15 12:08 | 只看该作者
if    ( count < 2 )
     {  .......   }
else
     {
     if   ( count == 1  )
          {  ......  }
     if   ( count == 2  )
          {  .....  }
      }



使用特权

评论回复
9
okdsnvoief|  楼主 | 2017-1-16 09:11 | 只看该作者
nethopper 发表于 2017-1-14 19:53
count等于1时执行的是:
if ( count < N)
    begin

恍然大悟,谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝