微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 5分频代码的遇到的问题

5分频代码的遇到的问题

时间:10-02 整理:3721RD 点击:
关于我写的5分频代码的疑惑
module div5_freq(clk_in, rst_n,clk_out);
input clk_in;
input rst_n;
output clk_out;
reg clkp;
reg clkn;
reg[2:0] countp;
reg[2:0] countn;
parameter div1 = 2 , div2 = 4;   // div1=5 / 2, div2 = 5 - 1
assign clk_out = clkp | clkn;
always@(posedge[/email] clk_in or negedge rst_n)
begin
   if(!rst_n)
      clkp <= 0;
   else if(countp == div1)
     clkp <= ~clkp;
   else if(countp == div2)
     clkp <= ~clkp;
   else
     clkp <= clkp;
end
always@(negedge[/email] clk_in or negedge rst_n)
   if(!rst_n)
     clkn <= 0;
  else if(countn == div1)
       clkn<=~clkn;
  else if(countn == div2)
    clkn <=~ clkn;
   else
   clkn <= clkn;
always@(posedge[/email] clk_in or negedge rst_n)
   if(!rst_n)
      countp <= 0;
   else if(countp == div2)
     countp <= 0;
   else
     countp <= countp + 1;
always@(negedge[/email] clk_in or negedge rst_n)
   if(!rst_n)
     countn <= 0;
   else if(countn == div2)
     countn <= 0;
   else
    countn <= countn + 1;
endmodule
我发现这里输出变量clk_out没有定义类型,且我尝试着给输出定义为reg型。run之后结果发现仿真没完没了的进行,且仿真窗口也没有波形产生!
请问这是问什么?

第一,clk_out定义成output,默认就是wire类型
你定义成reg还能用assign?工具没报错就是我脑子短路了
仿真进行不下去的原因是,你有一个组合逻辑的环路存在,因为没有加入延迟信息,因此某一点或者几点的值一直在变化中,所以仿真始终处于这个时间点上进行不下去。代码都是时序逻辑,不会有这个问题,你查查你的TB

关于楼上回答,我也尝试过output定义成reg,但是我用的always clk_out = clkp | clkn;也是运行不下去!
应该tb没问题的。因为我不定义输出类型时,运行很好!

always clk_out = clkp | clkn...
....这句话...麻烦要么你always后面加个#1,或者写成时序逻辑
不然就是每0个时间后做clk_out的赋值..不死才怪了...- -+

定义成wire应该不会有问题了。

默认就是wire, 不用加的,
看看你的testbench吧。

典型的新人,哈哈~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top