• FPGA综合与VHDL语法


    下面的内容是在富欣实习时总结下来的。

    综合相关:

    1.刘工说,D触发器最好不要一直刷新,需要用到使能信号,若使能信号是长时间持续的,则需要取其的上升沿和下降沿。

    2.以前写代码时,为了防止生成锁存器,会像下面这样写:

    elsif clk'event and clk='1' then
        if en='1' then
            q <= d;
        else
            q <= q;
        endif;
    endif;

    但其实else后面的是可以去掉的,时序电路中,D触发器有CE(clk enable)这个端口,当en不满足时,CE可以不使能,那么触发器的输出就不会改变。若是在组合电路中,else后面的则是不能省略的。

    由于目前的综合器比较强,我们根本不知道会综合出什么电路。可能代码的质量比较不好,但它会综合出质量比较好的电路。也有可能我们写代码时考虑到了很多的小细节,比如D触发器最好不要一直刷新之类的,但最后综合出来的电路并不符和我们的预想。以上的建议作为一种参考。

    VHDL语法相关:

    1.PROCEDURE若有输入和输出参数,那么写法如下:

       procedure Local_Bus_read_ppcid(ppc: in std_logic_vector(2 downto 0);signal data_out: out std_logic_vector(15 downto 0)) is
       begin
          vib_sim_status <= Local_Bus_read;
    
          ppc_id <= ppc;
    
    
          lbd <= (others => 'Z');
          wait for 270 ns;
          data_out <= lbd;
    
    
       end Local_Bus_read_ppcid;
    输出的信号需要加上signal,之前由于漏了这个就一直错。

    2.综合时出现以下错误

    found '0' definitions of operator "+", cannot determine exact overloaded matching definition for "+"

    说明我用了"+"号,但并没有USE IEEE.STD_LOGIC_UNSIGNED.ALL,这里用UNSIGNED或SIGNED都可以,这个库可使得"+"号两边的数据类型可以不同

    3.不管用VARIABLE还是SIGNAL,只要表达的意思一样,综合出来的电路是一样的,不用在意SIGNAL或VARIABLE在物理上的意义,这些变量只是建模的工具,重点是要将模型的意思表达清楚。还有一点,就是VARIABLE在MODELSIM仿真添加信号时,是没有的,看不到的。

    4.之前在仿真的时候,我知道inout信号在in和out切换时,需要拉成高阻,这点没错,但仿真还是出错,后来发现只要在TestBench里将inout信号初始化为Z即可,我是忘了初始化

    5.注释生成文档:doxygen


  • 相关阅读:
    centos7 yum错误相关
    centos7 jenkins
    vim 常用命令
    Effective STL(第7条)
    【hihoCoder】1049.后序遍历
    C++ 单元测试 Cpputest
    【hihoCoder】1041. 国庆出游
    LeetCode(43. Multiply Strings)
    【LeetCode】16. 4Sum
    【LeetCode】1. Two Sum
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713521.html
Copyright © 2020-2023  润新知