Verilog 零基础入门:语法、仿真与 FPGA 实战

一、入门前提

Verilog 是 FPGA 开发的核心硬件描述语言,学习需具备两大基础:一是数字电子技术常识(理解逻辑门、时序 / 组合逻辑等概念),二是 C 语言基础(有助于快速适应语法结构)。学习核心是掌握 “代码→硬件” 的映射逻辑,而非单纯记忆语法。

二、仿真环境选择

根据开发场景选择适配环境,需重点注意路径约束:

  • FPGA 开发环境:Xilinx Vivado(主流推荐)、Xilinx ISE(已停更)、Intel Quartus II
  • ASIC 开发环境:Synopsys VCS
  • 关键约束:电脑用户名、软件安装路径、工程路径必须全英文(无中文 / 特殊符号),否则会导致软件启动失败、编译报错或仿真异常。

三、Verilog 设计流程

  1. 需求分析:明确电路核心功能(如 LED 闪烁、数据运算);
  2. 功能划分:拆解复杂功能为独立子模块(如时钟模块、逻辑处理模块);
  3. HDL 描述:用 Verilog 代码编写模块,定义端口、数据类型与逻辑功能;
  4. 功能仿真:验证代码逻辑正确性,不通过则返回修改;
  5. 逻辑综合:将代码映射为 FPGA 内部物理结构(查找表、触发器等);
  6. 布局布线:按时序、引脚约束,匹配 FPGA 硬件资源;
  7. 时序仿真:验证时序性能,无问题则生成比特流文件,下载至 FPGA 硬件。

四、核心语法规则

1. 基础格式规范

  • 大小写敏感:clkCLK是不同标识符,关键字必须全小写;
  • 空格与换行:无语法意义,可灵活排版;
  • 语句结束:以分号;结尾,不可省略;
  • 注释方式:单行// 注释内容,多行/* 注释内容 */(不可嵌套)。

示例(两种写法功能一致)

verilog

// 推荐写法:分行排版 input wire a; input wire b; wire [1:0] results; assign results = (a == 1'b0) ? 2'b01 : (b == 1'b0) ? 2'b10 : 2'b11; // 紧凑写法:语法合法但可读性差 input wire a;input wire b;wire[1:0] results;assign results=(a==1'b0)?2'b01:(b==1'b0)?2'b10:2'b11; 

2. 标识符与关键字

  • 标识符:变量 / 模块的 “名字”,首字符为字母 / 下划线,后续可接字母 / 数字 / 下划线(不可数字 / 特殊符号开头);
  • 关键字:语言预留功能词汇(全小写),如reg(寄存器)、input(输入端口)、wire(线网)等;
  • 示例:reg [3:0] counter;中,reg是关键字,counter是标识符。

3. 数值表示规则

(1)四种基础逻辑值(硬件电平描述)
  • 0:逻辑 0(低电平,“假”);
  • 1:逻辑 1(高电平,“真”);
  • x/X:未知状态(信号可能为 0 或 1);
  • z/Z:高阻状态(无驱动源,逻辑值由上下拉电阻决定)。
(2)进制格式(格式:位宽 +' 进制符号 + 数值)
  • 二进制:'b(如2'b01);
  • 八进制:'o(如3'o15);
  • 十进制:'d(如4'd10);
  • 十六进制:'h(如8'h3F,适合简化宽位数据)。

4. 核心数据类型(仅两种,明确硬件映射)

(1)reg 类型

    Read more

    打造你的家庭 AI 助手(三):QQ 机器人接入你的 OpenClaw

    打造你的家庭 AI 助手(三):QQ 机器人接入你的 OpenClaw

    不得不承认腾讯进步的速度太快了,几条命令就可以接入Openclaw,也不用设置IP白名单了,在 QQ开放平台还增加了专门的Openclaw入口: 没啥好说的,很简单,安装完Openclaw之后,执行如下命令(命令也是生成好的): openclaw plugins install @tencent-connect/openclaw-qqbot@latest openclaw channels add--channel qqbot --token"" openclaw gateway restart 以下内容已经过时了,留作纪念 以下内容已经过时了,留作纪念 以下内容已经过时了,留作纪念 ⚠️ 重要提示:如果是家用宽带,没有申请固定 IP 地址的话,大可以放弃这种方式。由于 QQ 开发平台的白名单限制,机器人会非常不稳定,频繁掉线。建议使用云服务器或有固定 IP 的环境部署。 前言 在完成 OpenClaw 安装后,

    Flutter 三方库 wallet_connect 的鸿蒙化适配指南 - 实现 Web3 钱包协议连接、支持 DApp 授权登录与跨链交易签名实战

    Flutter 三方库 wallet_connect 的鸿蒙化适配指南 - 实现 Web3 钱包协议连接、支持 DApp 授权登录与跨链交易签名实战

    欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 wallet_connect 的鸿蒙化适配指南 - 实现 Web3 钱包协议连接、支持 DApp 授权登录与跨链交易签名实战 前言 在进行 Flutter for OpenHarmony 的去中心化应用(DApp)或加密货币钱包开发时,支持标准的 WalletConnect 协议是链接用户钱包的关键。wallet_connect 是该协议的 Dart 实现,它能让你的鸿蒙 App 安全地与 MetaMask、Trust Wallet 等钱包建立双向加密连接。本文将探讨如何在鸿蒙系统下构建安全、稳定的 Web3 授权流程。 一、原理解析 / 概念介绍 1.1 基础原理

    web3.0 开发实践

    web3.0 开发实践

    优质博文:IT-BLOG-CN 一、简介 Web3.0也称为去中心化网络,是对互联网未来演进的一种概念性描述。它代表着对现有互联网的下一代版本的设想和期望。Web3.0的目标是通过整合区块链技术、分布式系统和加密技术等新兴技术,构建一个更加去中心化、安全、隐私保护和用户的互联网。 Web 3.0具备四项主要功能 【1】去中心化: 去中心化的Web应用程序是Web 3.0的关键功能。其目的是在去中心化网络中分发和存储数据。在这些网络中,不同的实体拥有底层基础设施,用户直接向存储提供商付费以访问该空间。 去中心化的应用程序还将信息副本存储在多个位置,并确保整个过程中的数据一致性。每位用户可以控制其数据存放的位置,而不必将其移交给集中式基础设施。去中心化的互联网用户可根据需要出售自己的数据。 【2】去信任性: 在集中式Web应用程序和服务中,用户通常需要信任中央权威机构来管理其数据、交易和交互。这些中央权威机构可以控制用户数据,并且可以操纵系统的规则。数据可能存在安全风险或管理不善,从而导致用户信息丢失或滥用。 相比之下,Web3引入去信任性,因此用户可以在无需信任任何特定方

    Flutter 三方库 bavard 的鸿蒙化适配指南 - 实现语义化的聊天消息协议、支持机器人自动回复逻辑与分布式通讯元数据封装

    Flutter 三方库 bavard 的鸿蒙化适配指南 - 实现语义化的聊天消息协议、支持机器人自动回复逻辑与分布式通讯元数据封装

    欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 bavard 的鸿蒙化适配指南 - 实现语义化的聊天消息协议、支持机器人自动回复逻辑与分布式通讯元数据封装 前言 在进行 Flutter for OpenHarmony 的社交或客户支持类应用开发时,除了核心的 WebSocket 传输,如何规范化定义“消息(Message)”的数据结构以及处理复杂的对话逻辑状态,往往决定了项目的后期维护性。bavard 是一个专为高度语义化聊天交互设计的协议封装库。它能让你在鸿蒙端以极具逻辑感的对象模型来驱动对话流。本文将带大家了解如何利用 bavard 构建标准化的聊天架构。 一、原理解析 / 概念介绍 1.1 基础原理 bavard 将一次对话拆解为“参与者(Participants)”、“话题(Topics)”和“原子消息(Discrete Messages)”。它提供了一套完整的状态机,用于驱动从“