当前位置: 首页 > news >正文

用Verilog在Quartus II里手搓一个4位乘法器:从原理图到FPGA烧录全流程

从零手搓4位乘法器:Verilog+Quartus II实战指南

第一次在FPGA上实现数字电路时,那种看到LED灯按预期亮起的成就感至今难忘。本文将带你完整走一遍四位乘法器的实现流程,从Verilog代码编写到最终烧录,过程中遇到的每个坑都会详细说明。不同于教科书式的实验报告,这里聚焦的是真实项目开发中那些没人告诉你的细节。

1. 理解乘法器的核心逻辑

四位乘法器的本质是将两个4位二进制数相乘,得到一个8位的结果。在数字电路领域,实现乘法运算主要有两种思路:

  • 组合逻辑实现:通过门电路直接计算,延迟固定但资源占用较多
  • 流水线实现:分多个时钟周期完成,适合高速连续运算

对于初学者,组合逻辑是更好的起点。其核心原理可以用这个例子说明:

假设A=1101(13),B=1011(11),计算过程如下:

1101 (A) × 1011 (B) ------- 1101 (B[0]=1, 结果加上A<<0) 1101 (B[1]=1, 结果加上A<<1) 0000 (B[2]=0, 不加) 1101 (B[3]=1, 结果加上A<<3) ------- 10001111 (143)

Verilog实现时需要注意三个关键点:

  1. 位宽处理:4位输入需要8位输出寄存器
  2. 移位操作:使用<<运算符实现位置对齐
  3. 条件判断:仅当乘数位为1时才累加部分积

提示:实际电路中并没有真正的"乘法",而是通过移位和加法组合实现的,这与CPU中的ALU工作原理类似。

2. Verilog代码编写实战

打开Quartus II新建工程后,创建名为mult4x4.v的Verilog文件。以下是经过实际验证的代码版本,包含常见错误防范:

module mult4x4( input [3:0] A, // 被乘数,接拨码开关 input [3:0] B, // 乘数,接按键 output reg [7:0] R // 结果,接LED ); always @(*) begin R = 8'b0; // 初始化结果寄存器 for (int i=0; i<4; i=i+1) begin if (B[i]) R = R + (A << i); // 关键运算逻辑 end end endmodule

这段代码有几个易错点需要特别注意:

  1. 寄存器初始化:必须在使用前清零,否则会产生锁存器
  2. 敏感列表:使用@(*)自动包含所有输入信号
  3. 循环变量:现代Verilog支持int类型,比integer更规范

保存后将其设为顶层实体(右键文件→Set as Top-Level Entity),然后进行首次编译。如果遇到这些错误:

  • Error (10170):通常是缺少分号或括号不匹配
  • Warning (10240):未使用的信号,检查端口声明

3. ModelSim仿真技巧

仿真能提前发现90%的逻辑错误。新建mult4x4_tb.v测试文件:

`timescale 1ns/1ns module tb_mult4x4; reg [3:0] A, B; wire [7:0] R; mult4x4 uut (.*); // 自动连接端口 initial begin // 测试用例1:3×5 A = 4'b0011; B = 4'b0101; #10; // 测试用例2:15×15 A = 4'b1111; B = 4'b1111; #10; // 边界测试:0×0 A = 4'b0000; B = 4'b0000; #10; $stop; end endmodule

在ModelSim中运行后,正确的波形应该显示:

时间(ns)ABR
0-100011010100001111
10-201111111111100001
20-300000000000000000

如果发现输出全为X(未知值),通常是:

  • 寄存器未初始化
  • 敏感列表遗漏信号
  • 端口连接错误

4. 管脚分配与电路连接

根据常见的DE10-Standard开发板,推荐管脚分配如下:

信号管脚号开发板位置
A[0]PIN_34SW1
A[1]PIN_33SW2
A[2]PIN_31SW3
A[3]PIN_30SW4
B[0]PIN_24KEY1
B[1]PIN_25KEY2
B[2]PIN_26KEY3
B[3]PIN_27KEY4
R[0]PIN_156LED1
.........
R[7]PIN_161LED8

在Assignment Editor中输入这些映射后,需要特别注意:

  1. 电压标准:确保IO Standard设置为3.3V LVTTL
  2. 弱上拉:按键输入建议启用Weak Pull-Up
  3. 保留管脚:设为As input tri-stated

生成原理图时,总线连接的正确方式是:

  1. 右键Verilog文件→Create Symbol Files
  2. 新建Block Diagram/Schematic File
  3. 添加生成的符号,用总线工具连接(名称后加[n..0])

5. 烧录与调试实战

编译成功后,连接USB-Blaster下载器:

  1. 点击Programmer→Auto Detect选择FPGA型号
  2. 添加输出的.sof文件
  3. 勾选Program/Configure后点击Start

常见问题解决方案:

问题现象可能原因解决方法
No Hardware detected驱动未安装安装Altera USB-Blaster驱动
JTAG communication error接触不良或线缆问题检查连接,更换下载线
配置成功后无反应管脚冲突或时钟未设置检查全局复位和时钟分配

实际测试时,建议按这个顺序验证:

  1. 输入0×0确认所有LED熄灭
  2. 输入1×1检查最低位LED
  3. 输入15×15验证所有LED亮
  4. 随机组合测试如5×3、10×6等

当发现结果偏差时,用这个排查流程:

  1. 检查ModelSim波形是否正常
  2. 确认管脚分配与物理连接一致
  3. 用SignalTap II逻辑分析仪抓取实际信号

最后分享一个调试技巧:在代码中添加以下临时输出,可以通过开发板上的蜂鸣器快速定位问题点:

assign debug = (A == 4'b0000) && (B == 4'b0000) && (R != 8'b00000000);

这个项目最让我意外的是,看似简单的乘法器在实际硬件实现时会遇到这么多细节问题。最初版本因为忘记初始化寄存器,导致结果随机波动,花费了两小时才找到原因。这也正是硬件设计的魅力所在——每个细节都直接影响最终结果。

http://www.jsqmd.com/news/920533/

相关文章:

  • 【LeetCode刷题日记】108.将有序数组转换为二叉搜索树
  • 2026年知名的石粉洗沙机/青州矿山洗沙机厂家哪家好 - 行业平台推荐
  • 用过才敢说!2026年不容错过的专业AI论文平台
  • 2026年知名的安徽石灰粉/江苏灰钙粉(涂料专用)/上海氧化钙粉/浙江氧化钙长期合作厂家推荐 - 行业平台推荐
  • GPT-4与GPT-3.5实战选型指南:从核心能力到成本效益的深度对比
  • 2026年知名的锁扣纸护角/昆山环绕型纸护角/昆山纸箱护角品牌厂家推荐 - 品牌宣传支持者
  • 如何在5分钟内免费下载网页视频:VideoDownloadHelper插件终极指南
  • 从车窗升降到座椅调节:拆解一个真实的LIN总线车身控制模块(BCM)应用案例
  • 告别查询和中断:用STM32的DMA+环形缓冲区打造你的串口数据“蓄水池”
  • 2026年靠谱的安徽白云石/江苏灰钙粉(涂料专用)/浙江氢氧化钙推荐厂家精选 - 品牌宣传支持者
  • 别再死记硬背了!用Python仿真带你玩转SRT除法器设计(附完整代码)
  • 告别人工判读!ImageJ IHC Profiler插件保姆级安装与避坑指南(含宏文件配置)
  • C# TabControl关闭按钮避坑指南:解决重绘闪烁、事件冲突与内存泄漏
  • 避开这些坑!寒武纪MLU平台BANG C编程实战中的内存与同步陷阱
  • 同花顺F10里藏着的秘密:一键算出‘历史换手衰减系数’,让你的筹码峰更靠谱
  • 2026年质量好的步进电机驱动器/混合式步进电机/42步进电机稳定供货厂家推荐 - 行业平台推荐
  • 从上海电信数据集看边缘计算:如何用真实用户轨迹数据优化服务器部署?
  • 2026年性价比高的无花镀锌板/冲压级镀锌板优质厂家汇总推荐 - 行业平台推荐
  • 写作压力小了!2026年好用一键生成论文工具榜单,免费版也能写合规初稿
  • Python Flask项目实战:如何优雅地将爬取的视频流(m3u8/ts)自动归档到Cloudflare R2?
  • 别再傻傻分不清!DDR4/5与LPDDR4/5的ECC方案到底有啥不同?
  • 2026年品质上乘的深冲铝镁锌板/家电铝镁锌板/高锌层铝镁锌板/龙骨铝镁锌板高口碑品牌推荐 - 品牌宣传支持者
  • 别再暴力搜索了!用模拟退火算法为你的物流路径规划提效(Python实战)
  • 告别手动抠图!用Labelme的AI-Polygon功能快速分割图像(Python 3.8环境保姆级教程)
  • 科研党必备:如何用闲置旧电脑/树莓派搭建低成本WebDAV服务器,同步Zotero文献?
  • 从手机镜头到太空望远镜:拆解白光干涉仪如何守护不同领域光学镜片的‘面子工程’
  • 2026年知名的三相步进电机/步进电机驱动器/42步进电机深度厂家推荐 - 品牌宣传支持者
  • 从MySQL转战PostgreSQL?这份避坑指南和实战对比帮你平滑迁移
  • 从U-Net到Transformer:手把手带你用DiT代码生成你的第一张扩散模型图片
  • 山东专升本资料推荐|英语计算机语文高数真题精练