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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PHP TCPDF导出支持中文的pdf

    PHP TCPDF导出支持中文的pdfPHP使用TCPDF导出支持中文的pdf一、下载https://github.com/tecnickcom/tcpdf下载TCPDF压缩包二、使用方法 require_once(‘./TCPDF/tcpdf.php’); $pdf=new\TCPDF(); $pdf->AddPage(); $html=”<p>helloworld你好世界</p>”; $pdf->WriteHtml(20,$html); //四种模式I输出

  • Unix操作系统常用命令「建议收藏」

    Unix操作系统常用命令「建议收藏」Unix操作系统常用命令一、关于档案/目录处理的命令1、ls——列目录这是最基本的档案指令。ls的意义为”list”,也就是将某一个目录或是某一个档案的内容显示出来。格式:ls-1ACFLRabcdfgilmnopqrstux-W[sv][files]ls的常用参数如下:-a:在UNIX中若一个目录或文件名字的第一个字符为…

  • 验证码暴力破解测试[通俗易懂]

    验证码暴力破解测试测试原理和方法找回密码功能模块中通常会将用户凭证(一般为验证码)发送到用户自己才可以看到的手机号或者邮箱中,只要用户不泄露自己的验证码就不会被攻击者利用,但是有些应用程序在验证码发送功能模块中验证码位数及复杂性较弱,也没有对验证码做次数限制而导致验证码可被暴力枚举并修改任意用户密码。在测试验证码是否可以被暴力枚举时,可以先将验证码多次发送给自己的账号,观察验…

  • JavaScript Array(数组)对象中指定元素的删除

    JavaScript Array(数组)对象中指定元素的删除js在前台界面中举足轻重,在使用js删除数组时遇到一些问题(详见删除元素),参考很多大神的资料,现把常用的函数总结出来,以备不时之需。遇到的问题是,在table中有N行元素,并且存在父子关系,父行的id=“id_1”,子行的id=“id_1_1“,子行的子行id=”id_1_2”,依次类推,当我点击父行时会把所有的子行删除,当点击子行会把子行的子行删除,这样我就需要获取子行的id的最后一

  • python设置时间过期改变状态_Python Redis设置过期时间「建议收藏」

    python设置时间过期改变状态_Python Redis设置过期时间「建议收藏」默认情况下,某个键的存在是没有时效性的,即在明确删除该键之前,该键会一直有效。当然在创建字符串数据时是可以指定时效的,也可以在键创建后修改时效属性,如让该键的有效期为5秒,到了时间该键便会自动被删除。下面的代码演示了一个键在设定时效后自动被删除的情况:importtime,redisr=redis.Redis(host=’10.20.17.13′,port=6379,db=0)…

发表回复

您的电子邮箱地址不会被公开。

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