一个简单的CPLD程序,感觉仿真的波形有问题
程序是个10分频功能,下面是仿真的波形,两条黑线是仿真出来的波形,蓝色是我觉得对的波形,上面的值是count的计数值!仿真的波形明显不对,是在上升沿触发的,但是下面的波形明显不是上升沿切换状态的。
还有在count从1到5的时候,从程序看出来每到一个上升沿会有一个高脉冲啊??不知道对不对啊?
按你的思路,count应该声明为变量,而不是信号;声明为信号不是立即生效的; jm2011 发表于 2013-2-19 17:15 static/image/common/back.gif
按你的思路,count应该声明为变量,而不是信号;声明为信号不是立即生效的; ...
哦,原来是这么回事,初学还不太懂,那不会立即生效意思就是会有延时,那个延时时间是怎么指定的?我看仿真波形延长时间好像都是相等的。 我读程序感觉输出低电平时,每来一个上升沿,会有一个正脉冲啊?如图:
看书上说VHDL是并行执行的,不和mcu一样是按顺序执行,是不是这个原因? {:mad:}{:mad:} 信号和变量在VHDL中非常重要,建议专门看书系统看看;有点像VERILOG中的<= 和 =的区别; jm2011 发表于 2013-2-21 22:29 static/image/common/back.gif
信号和变量在VHDL中非常重要,建议专门看书系统看看;有点像VERILOG中的
了解了,那3,4楼剩余的问题您能解答一下么? q是寄存器输出的吧,当然不会有毛刺了。边沿没有对齐是因为寄存器的tco billwsy 发表于 2013-2-22 00:48 static/image/common/back.gif
q是寄存器输出的吧,当然不会有毛刺了。边沿没有对齐是因为寄存器的tco
q没定义成寄存器,楼主位的程序就是完整的了。tco全称是什么? R88 发表于 2013-2-22 08:44 static/image/common/back.gif
q没定义成寄存器,楼主位的程序就是完整的了。tco全称是什么?
你在时序进程里面对q赋值,q就会被综合成一个寄存器了,你可以看看综合后的原理图,就能明白了。记得一般来说VHDL里面的signal是寄存器,variable是组合逻辑。Tco为寄存器传输时间,我猜可能是Time: Clock to Output吧。 R88 发表于 2013-2-22 08:44 static/image/common/back.gif
q没定义成寄存器,楼主位的程序就是完整的了。tco全称是什么?
还有你是用什么软件仿真的?已经是时序仿真了?你可以先试试功能仿真。 billwsy 发表于 2013-2-24 11:35 static/image/common/back.gif
还有你是用什么软件仿真的?已经是时序仿真了?你可以先试试功能仿真。 ...
用quartersII仿真的,q我没有在赋值啊,只是给clk赋值了一个时钟信号 R88 发表于 2013-2-24 12:16 static/image/common/back.gif
用quartersII仿真的,q我没有在赋值啊,只是给clk赋值了一个时钟信号
我指的是你设计中的q。你用了q<=而不是q=,以及描述了rising_edge(clk),这两项告诉综合器,q是一个触发器,在clk上升沿才会改变,所以不会有毛刺出现。从你上面的截图看,你仿真的模式是Timing,也就是考虑到FPGA内部的资源的非理想型。例如一个信号经过一条线都会产生延时。本例中跳变沿和时钟没有对齐就是因为触发器输出的延时。你选择的时钟频率又比较高,让这个问题看上去很明显。
建议你先去学习一下基本的数字电路知识再来看硬件描述语言。硬件描述语言并不是“执行”的,它只是描述了一个电路的行为,综合器产生了一个电路,和你描述的行为一致。当你对电路没有一点概念的时候,你自然不知道你描述的是什么了。
页:
[1]