VHDL与Verilog的混合设计[通俗易懂]

VHDL与Verilog的混合设计[通俗易懂]VHDL调用Verilog模块的时候,要在实例化模块前,加上“verilogmodelGM:”VHDL调用verlogverilogmodule:modulem(a,b,c);inputa,b;outputc;…endmodule调用如下:compoentmport(a:instd_logic;…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

VHDL调用Verilog模块的时候,要在实例化模块前,加上“verilogmodelGM: ”
VHDL调用verlog

verilog module:
module m(a,b,c);
input a,b;
output c;

endmodule
调用如下:
compoent m
port(                 a: in std_logic;
                        b: in  std_logic;
                        c: out std_logic
                      );
end compoent
begin
verilogmodelGE: m
port map
(…
)

end
在VHDL里调用Verilog的话:例化+映射
在Verilog里调用VHDL的话:只要映射
看的别人的。。。所以是错误的

正确方法:

这里用VHDL调用VERILOG写好的模块.
先按VHDL的语法声明实体(也就是你用Verilog写的模块),然后按VHDL的语法例化实体就行了 .
这样就不用转换了,或者可以少用转换了.
例子.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use work.dt16_pkg.all;
entity clk_alm is
port (
      reset       : in    std_logic;
      fck32m      : in    std_logic; –来自背板的32M帧头
clk32m      : in    std_logic; –来自背板的32M时钟
refclk2m    : in    std_logic; –2M参考时钟
      clklos      : out   std_logic  –时钟告警输出
      );
end clk_alm;
architecture arch_clk_alm of clk_alm is
component clk_dog
   port(
       reset       : in    std_logic;
       clock   : in std_logic;–work clock
   refclk  : in std_logic;–reference clock
   alm     : out std_logic
       );
end component;

component ALM  –声明
   port( XMCLK    : in std_logic;
       RST      : in std_logic;
       M_CLK    : in std_logic;
       LOST_ALM : out std_logic
       );
end component;
   

signal alm_clk: std_logic;
signal alm_fck: std_logic;
signal refclk2m_div: std_logic;
signal count: std_logic_vector(2 downto 0);
signal delay_los: std_logic;

begin

clk_dog0: clk_dog
port map (
           reset   => reset       ,
           clock=>clk32m    ,
           refclk  =>refclk2m   ,
           alm =>alm_clk
           );

fck_dog0: ALM   –例化
PORT MAP(
          XMCLK     =>  fck32m   ,
          RST       =>  reset    ,
          M_CLK     =>  refclk2m_div ,
          LOST_ALM  =>  alm_fck
          );
         
process(reset,refclk2m)
begin
   if reset=’1′ then
  count<=(others=>’0′);
   elsif refclk2m’event and refclk2m=’1′ then
     count<=count+1;
   end if;
end process;
refclk2m_div<=count(2);

clklos<=not(alm_clk and alm_fck);  

end arch_clk_alm;

—————–以下是verilog写的module—————–

module ALM (XMCLK, RST, M_CLK, LOST_ALM);

input XMCLK ;
input RST ;
input M_CLK ;
output LOST_ALM ;

reg LOST_ALM;
reg [2:0]ALM_STATE;

reg [2:0]COUNTA;
reg [2:0]COUNTB;
reg [2:0]COUNTC;

always @(negedge RST or posedge XMCLK)
begin
if (!RST)
COUNTA <= 0;
else if (COUNTA == 7)
COUNTA <= 0;
else  COUNTA <= COUNTA + 1;
end

always @(posedge M_CLK)
begin
if (!RST)
begin
COUNTB <= 0;
COUNTC <= 0;
end
else
begin
COUNTC <= COUNTB;
COUNTB <= COUNTA;
end
end

always @(negedge M_CLK)
begin
if (!RST)
ALM_STATE <= 0;
else if (ALM_STATE == 7)
ALM_STATE <= 0;
else if (COUNTC == COUNTB)
ALM_STATE <= ALM_STATE + 1;
else  ALM_STATE <= 0;
end

always @(posedge M_CLK)
begin
if (!RST)
LOST_ALM <= 1;
else if (ALM_STATE == 7)
LOST_ALM <= 0;
else  LOST_ALM <= 1;
end
endmodule

其实不仅verilog 可以与 vhdl 混合使用,而且与原理图也能混合使用,就是传说中的分层设计,底层模块随便你用什么,生成符号就成,然后到顶层调用,顶层可用原理图也可用语言,目前altera的quartus、xilinx的ise、lattice的isplever均支持这种模式。

转载于:https://www.cnblogs.com/iwxg/p/4486824.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192020.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker中Jenkins安装allure和使用,bash: allure: command not found

    docker中Jenkins安装allure和使用,bash: allure: command not found我的docker中的Jenkins是已经安装allure了的,但是jenkins提示:bash:allure:commandnotfound。原来是我是通过管理员进入jenkins容器安装了allure的,而jenkins是以普通用户去运行的,所以我又以普通用户登录安装allure还是提示:bash:allure:commandnotfound。因为每次jenkins启动都是不同的用户备注:docker中jenkins安装allure可以参考这个链接:https://mp.c

    2022年7月26日
    30
  • 安装yum(Ubuntu中的安装,带讲解,以及源的更新)

    安装yum(Ubuntu中的安装,带讲解,以及源的更新)Ubuntu 中 yum 的安装 带讲解 先放上我这只菜鸟的绝望 在网上找了好久都搞不定 那些文章都不带人思考 一路给一堆命令 然而都搞不定 白瞎了 或者说我实在太菜 冷静 calmdown 重要的一步 我们来分析一下 这边说的是在软件包里面无法定位 yum 问题是什么 怎么解决直接的问题呢 right 直接的解决方法就是去更新软件包 而那种去找各种代码来安装 yum 的 只要源一修改 什么软件没

    2025年6月23日
    3
  • C#正则表达式匹配任意字符[通俗易懂]

    C#正则表达式匹配任意字符[通俗易懂]不得不说正则很强大,尤其在字符串搜索上匹配任意字符,包括汉字,换行符: [\s\S]*.

    2022年7月15日
    35
  • 区域医疗移动医疗影像解决方案–基于HTML5的PACS–HTML5图像处理【转】

    区域医疗移动医疗影像解决方案–基于HTML5的PACS–HTML5图像处理【转】

    2021年9月3日
    49
  • OpenCV中的width和widthstep[通俗易懂]

    OpenCV中的width和widthstep[通俗易懂]一是width属性;二是widthStep属性。     前者是表示图像的每行像素数,后者指表示存储一行像素需要的字节数。     在OpenCV里边,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。     如果8U单通道图像宽度为3,那么widthStep是4,加一个字节补齐。这个图像的一行需要4个字节,只使用前3个,最后一个空着。

    2022年6月11日
    32
  • python和java哪个更值得学_java和python「建议收藏」

    python和java哪个更值得学_java和python「建议收藏」从去年到现在IA人工智能热度一直都是上升,而且很多有经验的程序员也打出“2018年不学习Python还能学习哪种编程语言“的口号,可对于初学者来说,Python相对比较简单。Python的语法类似于伪

    2022年7月5日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号