yealien 发表于 2010-6-2 11:22:52

用非阻塞型赋值,占空比不对。

看到一例子,抄来用modulesim仿真时,发现占空比不对,是怎么回事呢?按道理应该是周期为100个单位,占空比1:1才对啊?
仿真波形图:
http://cache.amobbs.com/bbs_upload782111/files_29/ourdev_558947.jpg
(原文件名:12.jpg)

yealien 发表于 2010-6-2 11:23:26

module df(wav);
    output wav;
    reg wav;
    event end_wave;
    initial
    begin
      wav<=0;
      #50 wav<=1;
      #100 wav<=0;
      #150 wav<=1;
      #200 wav<=0;
      #250 ->end_wave;
    end
endmodule

tear086 发表于 2010-6-2 12:06:41

initial
begin
wav <= 1'b0;
forever
    #50 wav <= ~wav;
end

试试这样。

yealien 发表于 2010-6-2 14:40:34

多谢tear086大哥!我照你的试了一下,没问题!
不过我的好象也应该没问题才对啊!
为什么我的没有1:1的占空比呢?

jason0726 发表于 2010-6-10 22:20:43

回复【3楼】yealien
-----------------------------------------------------------------------

你吧程序改为
module df(wav);
    output wav;
    reg wav;
    event end_wave;
    initial
    begin
      wav<=0;
      #50 wav<=1;
      #10 wav<=0;
      #50 wav<=1;
      #50 wav<=0;
      #50 ->end_wave;
    end
endmodule
就可以了。因为时间常数不是你想的会累加的,而是每条命令都要执行一个新的时间常数。

mindrover 发表于 2010-6-11 01:42:08

回复【1楼】yealien
-----------------------------------------------------------------------
4楼的方法可用。如要想用绝对延时,需把延时放在非阻塞赋值符号右边。如:

module df(wav);
    output wav;
    reg wav;
    event end_wave;
    initial
    begin
      wav<=0;
      wav<=#50 1;
      wav<=#100 0;
      wav<=#150 1;
      wav<=#200 0;
      #250 ->end_wave;
    end
endmodule
页: [1]
查看完整版本: 用非阻塞型赋值,占空比不对。