题
我一直想制作自己的微处理器..我读了 如何制作自己的微控制器? .
我多次尝试学习一些 Verilog 和 VHDL。但对于我的一生来说,我就是无法理解语言风格。我有 C/C++/C# 背景,并且已经尝试过使用 Ruby 进行函数式编程(并取得了成功)。
任何人都可以推荐一本从头开始教授 HDL 语言的书籍或在线资源(这样我就可以忘记我的程序思维方式)
另外,我很难完全理解如何模拟 HDL 程序。没有什么比打印或硬件中的东西更好的了,那么在没有 FPGA 的情况下测试程序的最佳方法是什么(不过我有时会订购其中一种!)。模拟具体是如何工作的?
基本上我只是需要有人帮助我了解 HDL 及其模拟。
解决方案
请记住,HDL旨在为硬件建模。硬件一切都在同一时间发生。硬件是指一系列逻辑门以某种方式连接到输入和其他逻辑门的输出。这基本上就是FPGA或ASIC(在FPGA中,这些连接是可编程的)。摆动输入,效果在逻辑门链中产生波动 - 将每个逻辑门视为一个不断评估其输入的小处理器。
因此,在HDL中,您需要考虑的第一件事是所有分配都在同一时间进行。唯一的地方发生在“正常”的事情中。 sense(在常规编程语言中跟随另一个语句)是在进程块内部(在VHDL中,或在Verilog中始终为块)。但是你必须意识到所有的进程块(或者总是在Verilog中的块)也同时执行。
HDL只是试图模拟硬件的并发性。
对于试图向软件开发人员讲授HDL的书籍......我认为没有。大多数都是针对硬件工程师。
你提到你已经完成了一些Ruby编程。如果您想使用Ruby编写的HDL,可以试用RHDL: http://rhdl.rubyforge.org/ 基本的HDL概念在那里,它看起来很像VHDL,但它是Ruby,所以你可以用内部实验多一点。您可以编写模型然后进行模拟。有一些例子。
其他提示
使用模拟器及其波形查看器进行调试 - 您可以观察所有内部构件随时间变化的情况。此外,使用Modelsim,您还可以在流程中执行类似软件的断点。
您可以使用“报告”和VHDL打印出来的东西。声明,但你必须以非SW方式进行格式化:
report"值不是“ &安培; integer'image(some_integer_variable); 代码>
为了便于打印,请使用 textio软件包。
另一个提示 - 很多代码都有使用ieee.std_logic_arith.all;
。该库是非标准的(尽管有IEEE标识符),请改用 ieee.numeric_std.all
。
开始简单 - 创建一个计数器,每当时钟滴答时加1(使用如果rising_edge(clk)然后
idiom)。当计数器达到特定值时,切换信号。
创建一个测试平台来模拟它,这基本上意味着只是让clk信号变为'0','1','0','1'。
这是一个容易理解的方式:
process:
begin
clk <= '0';
wait for 5 ns;
clk <= '1';
wait for 5 ns;
end process;
运行SIM卡,观察计数器上升以及切换信号切换。如果你的计数器足够大,你可以建立一个FPGA,并通过将切换信号连接到LED引脚来观察和关闭LED闪光灯。
这就是FPGA等同于“Hello World”!
对于调试,Verilog提供类似于$ display或$ monitor的系统任务。这些当然不是可综合的,但每个模拟器都应该理解它们。 一方面调试就像SW调试一样,通过使用已经提到的$ diplay和东西打印信号值和其他任何东西到控制台。另一方面,通过盯着信号波形,直到找到病斑。 对于这些你甚至不需要FPGA的东西,你需要一个好的模拟器。但是让FPGA使一些LED闪烁总是很好的:)
对于模拟,你应该看看Modelsim。如果您在Windows上,可以免费获得学生版。
http://www.model.com/content/modelsim- PE-学生版HDL-模拟
另一个选择是Xilinx的ISE Web-Pack。这甚至适用于linux,包括完整的FPGA流程。
http://www.xilinx.com/tools/webpack.htm
但我推荐Modelsim进行模拟。
我手头的一些起点是:
http://www.asic-world.com/
http://www.doulos.com/knowhow/verilog_designers_guide/
我的回答可能晚了几年,但这是为了未来可能有相同疑问的观众。
我也有 C++/C# 背景。我的回答只涉及 Verilog HDL,而不涉及 VHDL。本学期我正在学习一门课程,以下是帮助我更好地理解 Verilog 的书籍:
- Verilog HDL:数字设计和建模 作者:约瑟夫·卡瓦纳
- Verilog HDL:数字设计与合成指南 作者:萨米尔·帕尔尼特卡
正如 skorgon 所回答的,您可以使用 Xilinx ISE 进行仿真。就 Verilog 而言,它最接近使用 C++/C# 的 Visual Studio。但对于原始的感觉(没有 IDE),您可能想尝试 iVerilog 或 伊卡洛斯 Verilog. 。我们课程中使用的就是这个。以下是使用 iVerilog 执行 Verilog 文件的方法:
在文本编辑器中输入代码,另存为 .vl
在 bin 文件夹内
iVerilog的。在命令提示符下,转到 bin 文件夹。然后输入以下内容:
iverilog -o <name of exe file you want for your .vl file> <your .vl file>
vvp <name of exe file>
例子:
iverilog -o samp sample.vl
vvp samp
希望这可以帮助!
有时需要打印实例名称。如果在设计中使用了相同组件的许多实例,这将非常有用: “...虽然在VERILOG中很简单(显示系统功能中的%m),但在VHDL中需要更多的代码写入。 $ display(&quot; dbg instance name%m at%d&quot;,$ time); 此站点上还提供了如何在systemc中打印实例名称的示例。
此类调试信息的重要性在于设计包含同一组件的许多实例。
必须调用第一个文本IO库,并声明行变量。请参阅打印示例以查看详细信息。
接下来,您必须在两个选项之间进行选择:一个是:实例名称仅在调试字符串中,另一个选项提供更多信息,例如条目和体系结构名称......“ http://bknpk.ddns.net/my_web/MiscellaneousHW/vhdl_path_name_print.html