inter 发表于 2010-6-27 23:25:58

三分频的verilog程序

小弟想编个三分频的程序,思想如下:利用计数器,进行模3计数,当第一个上升沿计数器计数到2时,使分频输出信号翻转,当这个计数器计数到3时,再回到0开始计数;再当第二个下降沿计数器计数到3时,再让分频输出信号翻转,同时将这个计数置0,从新开始计数!如此反复,形成三分频!(不知思路对不?)
以下是程序:
module threediv(divclk,a,b,clk,rst);//divclk是分频输出信号,a计数器一,b计数器二,clk时钟
input clk,rst;         //rst复位信号 
output divclk,a,b;
reg divclk;
reg a,b;
always @(posedge clk or negedge rst)//第一个计数器按思路的实现
begin
    if(~rst) a<=2'b00;
    else a<=a+1;
   begin
      if(a==2'b10) divclk<=~divclk;
      if(a==2'b11) a<=2'b00;
   end
end
always @(negedge clk or negedge rst)//第二个计数器按思路的实现
begin
    if(~rst)b<=2'b00;
    elseb<=b+1;
    begin
   if(b==2'b11)
      begin         
      divclk<=~divclk;
      b<=2'b00;         
      end      
    end
end


endmodule

以下是测试模块
module Tthreediv;
reg clk,rst;
reg divclk;
reg a,b;
threediv d(divclk,a,b,clk,rst);
initial
begin
   clk<=0;
   rst<=0;
   a=2'b00;
   b=2'b00;
   divclk=0;
end
always
begin
   #3 clk=~clk;
   #30 rst=~rst;
end
initial
$monitor($time,clk,rst,divclk);
endmodule

我在ModelSim软件上仿真,编译通过了,可是要simulate就出现了下面的问题:
# Loading work.Tthreediv
# Loading work.threediv
# ** Error: (vsim-3053) G:/threediv/Tthreediv.v(5): Illegal output or inout port connection (port 'divclk').
#   Region: /Tthreediv/d
# ** Error: (vsim-3053) G:/threediv/Tthreediv.v(5): Illegal output or inout port connection (port 'a').
#   Region: /Tthreediv/d
# ** Error: (vsim-3053) G:/threediv/Tthreediv.v(5): Illegal output or inout port connection (port 'b').
#   Region: /Tthreediv/d
# Error loading design

感谢各位帮解决一下!

AAT 发表于 2010-6-28 00:29:38

老大,那几个信号是输出啊

tim 发表于 2010-6-28 01:43:08

恩,你的testbench写的有问题

CTT 发表于 2010-6-28 02:40:51

怎么解决呢?楼上的,帮小弟一下

tim 发表于 2010-6-28 04:23:57

你的output没有定义a,b的位宽!!!

ANG 发表于 2010-6-28 05:53:54

还有你的clkdiv不能在两个模块中都赋值

AAT 发表于 2010-6-28 07:21:04

补充一点:不要在一个module里用时钟上升沿和下降沿分别采样数据,应该放在不同模块里。这样做有利于在划分不同扫描链时把下降沿触发的触发器方便的分离开来,也有利于后端布局布线。

ANG 发表于 2010-6-28 09:19:24

恩,楼上的说的对, 开始没注意到

CCIE 发表于 2010-6-28 10:05:48

问题多多啊,^_^

tim 发表于 2010-6-28 10:35:41

感谢回帖的所有人,谢谢!同时希望后来者踊跃发言
页: [1] 2 3
查看完整版本: 三分频的verilog程序