我一直想制作自己的微处理器..我读了 如何制作自己的微控制器? .

我多次尝试学习一些 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 的书籍:

你可以找到很多书 这里 如所列 ASIC世界 地点。

正如 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

如果您精通C编程,您可以非常轻松地学习任何其他编程语言。硬件描述语言没有太大差异。但您必须了解常用硬件组件的基础知识。例如,如果你知道的话,全加器的设计非常简单全加器的输入和输出是什么。您还必须知道输入和输出之间的关系。 pdf 可能对初学者有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top