• 主页
  • 分类
  • 标签
  • 关于
  • 归档

  • 主页
  • 分类
  • 标签
  • 关于
  • 归档

FPGA-QuartusII——HDLBits学习记录

2024-06-03

0-1 开始

第一步

欢迎来到HDLBits!

对于数字逻辑的入门,一开始可能比较困难。因为你需要学习新的概念,一种新的语言(硬件描述语言,Hardware Description Language)例如Verilog,一些新的软件包,通常还需要FPGA开发板。这些新内容的学习几乎是同时进行的。而HDLBits只需要简单点击一下“仿真”(Simulate)按钮,就可以设计、调试简单电路。

设计一个电路需要以下步骤:撰写HDL代码(例如Verilog代码)、编译该代码从而生成一个电路、仿真电路并修正错误。

写代码

最简单的写代码的方式就是在下面的编辑框内编写你的代码。对于每一个问题,我们已经写好了该问题部分必要的代码以简化你的工作。你只需要完成该电路的剩余代码即可。

编写完代码后,点击提交(Submit)开始编译和调试你的设计。

编译(逻辑分析)

你所写的代码被Altera Quartus编译并生成电路。这个过程Quartus会生成巨量的信息。点击“展示Quartus信息”(Show Quartus messages)来展开/隐藏这些信息。对于警告信息(warnings)需要辩证地看待。消除大量的警告固然很好,但是警告毕竟不是报错,消除全部的警告在有些情况下并不现实。

仿真

对编译好的电路需要仿真,以测试电路功能是否正常。进行仿真时,HDLBits会使用ModelSim同时仿真你编译生成的电路和网站自带的参考电路,然后对比两者的输出。仿真报告会反映两种信息:

  • 不匹配信息

仿真报告会报告你的电路是否和参考电路完全匹配(零错误)。如果不是完全匹配,仿真报告会详细反映不匹配的情况。不匹配是指你的电路输出的样例和对应(对应是指相同输入)参考电路输出的样例不相同。

  • 时序图

仿真报告会生成时序图(timing diagrams)。时序图是指在运行测试矢量时的电路输出。仿真的波形分为三个部分:输入、你的电路输出、参考电路输出。如果你的电路是正确的,那么你的电路输出和参考电路输出是相同的。如果不完全相同,仿真报告会在Mismatch中反映出哪些样例是不相同的。

顶级(top-level)top_module的模块名和端口名不能更改,否则会产生仿真错误。

最终状态

如果你的电路是正确的,你可以看到“状态:成功!”(Status: Success!)的字样。不正确的情况有以下几种:

  • Compile Error(编译错误) — 电路没有被编译出来→说明你的代码有语法错误或者无法生成合理的电路
  • Simulation Error(仿真错误) — 电路被编译出来了,但是仿真没有完成
  • Incorrect(不正确) — 电路和仿真都完成了,但是你的电路输出和参考电路的输出不匹配

你可以在我的统计页面跟踪或者分享你的进度。


以上就是对HDLBits的简单介绍,下面进行一个简单的示例。

问题说明

我们将从少量 HDL 开始,以熟悉 HDLBits 使用的接口。下面是本练习所需的电路描述:

构建一个没有输入、只有一个输出的电路。该输出应始终驱动 1(或逻辑高电平)。

预计解决方案长度:约 1 行。

模块声明

1
module top_module( output one );

提示:我们想要将1赋值给输出端

1
2
3
4
//正确代码示例
module top_module( output one );
assign one = 1'b1;
endmodule

0-2 输出零

建立一个没有输入、只有一个输出的电路,输出常数 0

既然你已经完成了前面的问题,那么让我们来看看你能否在没有提示的情况下完成一个简单的问题。

HDLBits 使用 Verilog-2001 ANSI 样式的端口声明语法,因为这种语法更易于阅读并能减少错别字。如果您愿意,也可以使用较早的 Verilog-1995 语法。例如,以下两个模块声明是可接受的等价声明:

1
2
3
4
module top_module ( zero );
output zero;
// Verilog-1995
endmodule
1
2
3
module top_module ( output zero ); 
// Verilog-2001
endmodule

模块声明

1
module top_module( output one );

提示:有趣的事实,Quartus 综合时,不给信号赋值通常会导致信号为 0。

1
2
3
4
5
module top_module(
output zero
);
//不用赋值即可通过
endmodule
  • 硬件
  • 学习记录
FPGA与数字IC的区别
Keil 5 STM32 编写准备工作
© 2026 DEEPLOWER · 京ICP备2026034201号-1