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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • contextpath有什么用_context的用法

    contextpath有什么用_context的用法使用基于Java的后端(即servlet和JSP),如果我需要JavaScript的contextPath,那么推荐的模式是什么?为什么?我可以想到几种可能性。我缺少任何吗?1.将SCRIPT标记刻录到在某些JavaScript变量中设置的页面中varctx=””这是准确的,但在加载页面时需要脚本执行。2.在一些隐藏的DOM元素中设置contextPath这是准确的,并且在加载页面时不需要任…

    2022年9月15日
    0
  • rtsp html播放_浏览器视频播放rtsp

    rtsp html播放_浏览器视频播放rtsp从摄像机获取的RTSP视频流直接在浏览器中播放,这里采用vlc插件进行播放,设置步骤如下1、下载32位的vlc播放器,安装时选择安装插件,安装路径不要有空格,注意64位播放器安装上也不能正常播放(我测试不能正常播放)2、注册VLC插件(否则视频无法正常显示):使用cmd运行:regsvr32D:\VideoLAN32\VLC\axvlc.dll其中D:\VideoLAN32\VLC为VLC安…

    2022年10月9日
    0
  • 和第三方接口对接总结

    和第三方接口对接总结接口对接分为两种形式:我方A公司提供接口给B公司,B公司进行一些操作时调用我们的接口进行实现。例:A开发会员等级同步接口,供B同步会员等级到B系统。B会员等级的变动需要调用A接口主动推送给A(即更新会员卡等级)。我们首先要做的就是按照对方的要求,在对方调用我们的接口,我方成功处理之后,按照对方所需要的返回数据以及格式反馈给他们信息。在写本接口中,因为我们会员卡等级的字段是不一样的,所…

    2022年5月2日
    51
  • webpack(6)webpack处理图片

    webpack(6)webpack处理图片图片处理url-loader(webpack5之前的处理方式)在项目开发中,我们时长会需要使用到图片,比如在img文件夹中有图片test1.png,然后在normal.css中会引用到图片body

    2022年7月29日
    2
  • 软件测试分类

    软件测试分类一、软件测试的分类1、按开发阶段:单元测试、集成测试、系统测试、验收测试2、按测试实施组织:α、β、第三方3、按测试执行方式:静态测试、动态测试4、按是否查看代码:黑盒测试、白盒测试、灰盒测试5、按是否手工执行划分:手工测试、自动化测试6、按测试对象划分:性能测试、安全测试、兼容性测试、文档测试、易用性测试(用户体验测试)、业务测试、界面测试、安装测试7、按测试地域划分…

    2022年9月6日
    2
  • TypeError: ‘Collection‘ object is not callable. If you meant to call the ‘insert‘ method on a ‘Datab

    TypeError: ‘Collection‘ object is not callable. If you meant to call the ‘insert‘ method on a ‘DatabfrompymongoimportMongoClient报错问题描述解决方法问题描述使用pymongo连接本地的MongoDB,跟个老师的视频,出现报错,后查询资料改正frompymongoimportMongoClient#创建数据库连接对象client=MongoClient()#选择一个数据库db=client[‘python’]#身份认证#db.authenticate(‘python’,’python’)#选择一个集合col=c

    2022年7月16日
    23

发表回复

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

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