40130064 发表于 2010-4-21 23:53:02

VHDL求助,高手帮我看下这段代码中警告。

这段代码功能没问题,但有30多警告,大概是寄存器之类的警告,有没有隐患?

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity PUL is
        port(
             rest            : in STD_LOGIC:='0';      
             cen         : in STD_LOGIC:='0';
             jEN      : in STD_LOGIC:='0';   
             clk                     : in std_logic;
             yd    : in integer range 0 to 8000;       
             sout   : out integer range 0 to 8000;
             sd             : in integer range 0 to 8000);      
          
end PUL;

architecture ep2c8 of PUL is
signal scounter :integer range 0 to 8000;
begin

process (clk,cen,rest,yd)
begin
if (rest='1')then
scounter <=yd;
sout <=1000;
elsif (clk'event and clk='1')AND (rest='0')then
   if (cen='1')then
                if(sd /= scounter)AND(jEN='0')AND(sd >100) then
                scounter <=scounter -1;
                elsif (jEN='1')AND(scounter<8000)then       
                scounter <=scounter+1;
                else
                scounter <=scounter;
                end if;       
                sout<=scounter;                                                                                                                                                                                                 
        end if;
else
null;
end if;       
end process;

end ep2c8;

zkf0100007 发表于 2010-4-22 00:06:50

1.端口不要用整型,用std_logic_vector
2.不要给端口赋初值,没有任何意义
3.elsif (clk'event and clk='1')AND (rest='0')then ,这一句的AND (rest='0')明显多余,可以去掉

40130064 发表于 2010-4-22 08:11:37

多谢楼上兄弟1.端口不要用整型,用std_logic_vector 为什么啊?用整的话我比较方便,因为最大值的问题。

另外主要是想消除警告。
说明 器件选MAXII没警告 用EP2C时就有了

jangyouhua 发表于 2010-4-22 10:44:14

回复【楼主位】40130064
-----------------------------------------------------------------------

这个VHDL程序好乱!作者是新手!要多练习啊!写HDL程序每句或每部分最好自已知道最终综合成什么样子!如果你自已都模糊不清
别指望综合器给你综合成最好最优化正确的电路!每次写完后你最好看看综合后的RTL,对逻辑电路是不是多了不该有的latch,对时序电路是不是多出了register......
多实践多比较!

40130064 发表于 2010-4-22 11:26:58

回复【3楼】jangyouhua
-----------------------------------------------------------------------

你帮我搞个啊,这个其实是一个受CLK周期变化梯形数据输出 说简单点就是一个梯形加减速控制电机的程序

关键是这部分不能少rest实际上是一个单脉冲,出现时scounter <=yd;
if (rest='1')then
scounter <=yd;
就是要在rest到来时给scounter一个初始值

40130064 发表于 2010-4-22 11:37:31

http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_548347.JPG
(原文件名:未命名.JPG)

40130064 发表于 2010-4-22 15:31:36

新手问题你们老手帮解决下啊!~~~~~~~~~~~~~~~~~~~~

其实这是一个多驱动源 就是CLK和REST 同时控制scounte,你们就给我装高手吧

zkf0100007 发表于 2010-4-22 15:56:28

回复【2楼】40130064
多谢楼上兄弟1.端口不要用整型,用std_logic_vector 为什么啊?用整的话我比较方便,因为最大值的问题。
另外主要是想消除警告。
说明 器件选MAXII没警告 用EP2C时就有了

-----------------------------------------------------------------------

如果端口定义为整形,请问管脚时从怎么约束?
你可以定义一个整型信号,最后输出给端口时转换一下,用conv_std_logic_vector(int,n),其中int为整型信号,n为位数

40130064 发表于 2010-4-22 16:31:03

回复【7楼】zkf0100007
-----------------------------------------------------------------------

明白了点 谢谢 不过这个模块不设计管脚约束,因为它是中间的

这个转换函数我一直没用过 conv_std_logic_vector(int,n) 学习下!

zkf0100007 发表于 2010-4-22 17:03:37

回复【8楼】40130064
回复【7楼】zkf0100007
-----------------------------------------------------------------------
明白了点 谢谢 不过这个模块不设计管脚约束,因为它是中间的
这个转换函数我一直没用过 conv_std_logic_vector(int,n) 学习下!
-----------------------------------------------------------------------
不管是否顶层模块,都不推荐实用整型作为端口

40130064 发表于 2010-4-23 14:34:50

自己顶上去找高手帮忙

rest是一个脉冲,就是要(rest='1') 将yd值给scounter,寄存。同时 clk上升沿时控制scounter加减


当然rest上升沿时将yd值给scounter寄存是最好的,当时我这么想,可是水平有限,因为两个信号同时控制一个,明显涉及多驱动源的方法。

dongzhiqing 发表于 2010-4-23 21:37:50

麻烦楼主找一本VHDL的书浏览一下。

dongzhiqing 发表于 2010-4-24 09:42:30

我再来说一下为什么不能把端口定义成整数。
有一些书中的一些小程序把端口定义成integer类型,我也按照这个做过,但是仿真出来的结果是0to100的数竟然占用101个端口,竟然是one-hot编码。其实我觉得这和编译器有关的,估计人们都不用integer定义,编译器也不干了。

40130064 发表于 2010-4-24 14:01:55

回复【12楼】dongzhiqing
-----------------------------------------------------------------------
我晕了 你们别误会 我的主要问题不是端口问题 端口integer类型不是我发明的!!我从书上学的!!只是没人告诉我用这个的利弊.


主要问题是这个

rest是一个脉冲,就是要(rest='1') 将yd的值给scounter寄存。同时 clk上升沿时控制scounter加减
当然rest上升沿时将yd值给scounter寄存是最好的,当时我这么想,可是水平有限,因为两个信号同时控制一个我实在写不出。

这几行代码最终的功能没问题 正常!在硬件上跑没出问题。我是想改进下,因为整个工程就这地方有警告,至于前面有人说RTL级,我没这水平,也没这时间。

最后只能用计数器清零的写法.
页: [1]
查看完整版本: VHDL求助,高手帮我看下这段代码中警告。