大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
初学FPGA,记录一些个人的探索历程和心得。本文的初衷是为了验证VHDL和Verilog文件互相调用功能。以一个简单的二选一选择器为例,分别用两种方法实现功能。
一、 用Verilog文件调用VHDL
以Verilog文件为顶层文件,调用VHDL模块,testbench为Verilog文件。
1、新建project
2、编写.vhd文件,FPGA_VHDL.vhd,文件名与模块名称一致;
3、编写FPGA_Verilog.v文件,文件名与模块名称一致,且设为top文件。
4、编写testbench文件,FPGA_VHDL.vt,设置时钟周期为20ns,延时50ns后reset=1,aa=0,bb=1,每16个时钟,ss信号翻转一次;
5、仿真,调用出Modelsim,选择testbench文件编译,设置仿真时长100us,执行仿真,仿真波形如下:
结论:时钟周期为20ns,reset在50ns时置高,计数cnter到15后回0,到零后ss电平翻转,当ss=0时,yy=0;当ss=1时,yy=1,与目标功能一致。
二、 用VHDL文件调用Verilog
1、新建project
2、编写.v文件,FPGA_Chooser.v,模块名称要与文件命名一致,定义模块端口名和组合逻辑;a,b,s为输入端口,y为输出端口。当s=0时,y=a;当s=1时,y=b。
3、编写.vhd文件FPGA_VHDL_top.vhd,并设为top文件,模块名称要与命名模块一致, 例化元件端口名要与.v文件的模块端口名一致,连接端口名则为实体定义的端口名。定义输入端口aa,bb,ss,输出端口yy,分别与模块FPGA_Chooser的端口a,b,s,y对应。
4、生成testbench仿真测试文件FPGA_VHDL_top.vht,给变量赋值,定义时钟周期为20ns;reset初始值为0,在50ns后为1;aa,bb分别为0和1,ss每16个时钟信号翻转一次。
5、仿真,调用出Modelsim,选择testbench文件编译,设置仿真时长100us,执行仿真,仿真波形如下:
结论:从波形可得,时钟周期为20ns,50ns后reset=1;ss每16个时钟周期电平翻转一次,当ss为1时,yy为1;当ss为0时,yy为0。仿真与设计初衷一致。
三、测试总结
1、Verilog调用VHDL比较简单,需要把VHDL的实体(entity)当成一个verilog模块(module),按verilog的格式调用。“FPGA_Verilog.v + FPGA_VHDL.vhd”
2、VHDL调用verilog hdl相对较复杂,需要先将verilog的模块(module)做成VHDL的元件(component),再进行调用。“FPGA_VHDL_top.vhd+FPGA_Chooser.v”
3、在用Verilog文件调用VHDL模块时,定义中间变量为wire型。例化底层模块时,“.”为例化端口,”()”内为wire型变量。调用结束后,将例化模块的输出值赋给top文件的输出端口,若未赋值,输出无数据,为高阻态;
4、在top文件中定义的中间变量位数要与子模块的变量位数相匹配,若不匹配,输出无数据,为高阻态。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191088.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...