我必须从文件加载ROM。 Quartus可以直接使用.mif
文件,并且可以使用我在textio的帮助下编写的(快速且脏的).mif
文件分析器的模拟器。有没有办法检测合成器工具(在我的情况下是Quartus),并且只有在合成器工具没有编译时才生成textio文件加载器进程?如何检测编译器
如何检测编译器
回答
你们是不是要推断你的代码ROM的?如果你正在使用LPM功能,那么一切都应该“正常工作”。
我在Quartus和ModelSim中使用ROM没有问题。只需使用MegaWizard插件为您的ROM创建自定义VHDL文件,并将其指向相应的初始化文件,或者直接实例化altsyncram组件并包含init_file通用。
然后像平常一样进行编译或模拟。使用带初始化ROM的ModelSim(Altera版本或独立版本)运行模拟时,我没有任何问题,并且不必编写任何初始化代码来读取* .mif或* .hex文件。
供参考,在这里是有点我的代码在ModelSim的正确模拟直接实例ROM宏功能(注意init_file通用):
-- Sine lookup table
sine_lut : altsyncram
generic map (
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
init_file => "./video/sine_rom-512x8.mif",
intended_device_family => "Arria GX ",
lpm_hint => "ENABLE_RUNTIME_MOD=NO",
lpm_type => "altsyncram",
numwords_a => 512,
operation_mode => "ROM",
outdata_aclr_a => "NONE",
outdata_reg_a => "UNREGISTERED",
widthad_a => 9,
width_a => 8,
width_byteena_a => 1
)
port map (
-- Read port
clock0 => clk,
address_a => sine_addr,
q_a => sine_do
);
如果你真的需要做一些不同的模拟VS时。综合,有几种方法可以去做。对于简单的事情,你可以使用类似下面的指令:
--synthesis translate-off
<code for simulation only>
--synthesis translate-on
你应该能够找到很多通过互联网搜索这些指令的真实世界的例子,我已经包括下面一个例子(上电复位在实际硬件上运行时,模拟与时越短):
-- Async. Power-on Reset, with de-assertion delay
process (clk)
begin
if rising_edge (clk) then
-- Create a delay at power-up
if rst_PowerOn='1' then
rst_pora <= '1';
rst_por_cnt <= (others=>'0');
-- synthesis translate_off
elsif rst_por_cnt(5)='1' then -- 256 nS in simulation
rst_pora <= '0';
-- synthesis translate_on
elsif rst_por_cnt(19)='1' then -- 4ms in real hardware
rst_pora <= '0';
else
rst_por_cnt <= rst_por_cnt + 1;
end if;
end if;
end process;
对于更复杂的情况下,使用你的想象力。一些人在合成/仿真之前使用C预处理器,M4宏语言或类似的初步构建步骤。我有Makefile和脚本,将FileName.sim.vhdl(用于模拟)转换为FileName.vhdl(用于综合),使用一些文本实用程序处理它以根据我制作的规则对各种代码块进行评论/取消注释,以便我可以维护这两个版本都在一个文件中(比如增强的C预处理器,用于VHDL)。只要做一些适合你的工作流程和团队动态/文化的东西。
您可以通过使用仅被特定综合工具接受的编译指示来检测综合工具。例如,你可以写:
constant isQuartus : std_logic := '1'
-- altera translate_off
and '0'
-- altera translate_on
;
这个常数会'1'
只有当你合成这种使用Altera的Quartus。
更多关于各种VHDL metacomment编译的位置:http://www.sigasi.com/content/list-known-vhdl-metacomment-pragmas
- 1. 编译时编译器如何检测数字溢出?
- 2. 如何检测use_frameworks!在编译时
- 3. 如何在编译时检测WP8
- 4. 检测编译器和调用
- 5. 编译器检测allegro.h,但不是allegro_primitives.h
- 6. Matlab不检测Visual Studio C++编译器
- 7. 在编译期间检测编译器版本
- 8. SUNWspro编译文件 - 检测编译器的版本号
- 9. 编译器如何检测字符串是正则表达式?
- 10. 如何检测编译器是否支持static_assert?
- 11. 如何在编译时检查编译器?
- 12. 编译器如何检测跨翻译单元的重复定义
- 13. 如何在C++中编译编译器?
- 14. 单元测试编译器
- 15. html5检查器编译
- 16. 编译时检测CPU架构
- 17. 编译时检测OCaml版本C
- 18. 在编译时检测模板存在
- 19. 在MonoTouch中编译时检测JIT
- 20. CRTP编译检测与模板组合
- 21. 检测预编译头文件
- 22. cmake在编译时检测空目录
- 23. 检测或避免在编译时
- 24. 如何检测到我在CMakeLists.txt中进行交叉编译?
- 25. 如何检测用LTO编译的代码?
- 26. 如何检测的XCode VS编译文件
- 27. 如何在预编译时检测iPhone/ipad
- 28. C++/GCC:如何检测未处理的异常在编译时
- 29. 如何在编译时检测C++中的std :: reference_wrapper
- 30. 如何通过android ndk在C/C++文件中检测编译?
许多感谢您的帮助!总结一下:我刚刚在代码段中添加了--pragma/synthesis translate_off和 - synthesis/pragma translate_on,这些onlu应该在模拟器中使用。 http://code.google.com/p/pakorobiol/source/browse/trunk/c25Board.vhd – nulleight 2012-01-09 22:03:39