基于FPGA/CPLD应用设计的23点经验总结——关于VHDL代码风格

Verilog HDL常用的行为仿真描述语句(一) 一、循环语句1、forever语句forever语句必须写在initial模块中,主要用于产生周期性波形。2、利用for、while循环语句完成遍历for、while语句常用于完成遍历测试。当设计代码包含了多个工作模式,那么就需要对各个模式都进行遍历测试。其典型的应用模板如下:parameter mode_num = 5;initial begin 阅读详情

摘自《FPGA/CPLD应用设计200例》

  1. 对所有的信号名、变量名和端口名都用小写,对常量名和由用户定义的类型用大写。
  2. 使用有意义的信号名、变量名、端口名和参数名。
  3. 信号名长度不要太长,力求简洁明了。
  4. 对于时钟信号使用clk作为信号名或信号名的前缀(当设计中存在多个时钟时)。
  5. 对来自同一驱动源的信号,在不同的子模块中采用相同的名字。这要求在芯片总体设计时就定义好顶层子模块间连线的名称,端口和连接端口的信号尽可能采用相同的名字。
  6. 对于低电平有效的信号,应该以一个下划线加一个小写字母b或n表示,如a2b_reg_n。
  7. 对于复位信号,用rst作为信号名。如果是低电平有效,则是rst_b或rst_n。
  8. 尽量遵守业界已经习惯的一些约定。如*_r表示寄存器输出,*_a表示异步信号,*_pn表示多周期路径第n个周期使用的信号,*_nxt表示锁存前的信号,*_z表示三态信号等。
  9. 在源文件、批处理文件的开始处应该包含一个文件头。一般包含以下内容:文件名、设计者、模块名、模块的实现功能概述、使用的仿真软件以及软件运行的平台、使用的综合工具以及工具运行的平台,文件创建时间,文件的修改时间。
  10. 使用适当简短的语句注释所有的进程、函数、端口含义、信号含义、变量含义及信号组、变量组的意义等。
  11. 每一行语句独立成行。
  12. 采用缩进以提高续行和嵌套语句的可读性。
  13. 在RTL源码的设计中任何元素的命名都不能取VHDL和Verilog的保留字。
  14. 在进行模块的端口声明时,建议使用以下顺序:输入信号的clk, rst , enables other control signals, data and address signals,然后是输出信号的clk, rst , enables other control signals, data and address signals。
  15. 在例化模块时,使用名字显式映射而不是采用位置相关的映射,这样可以提高代码的可读性和避免编译连线错误。
  16. 如果同一段代码要重复多次,应尽可能使用函数;如果有可能,将函数通用化。
  17. 尽可能使用循环语句和寄存器组来提高源代码的可读性。
  18. 代码编写时的数据类型只使用IEEE定义的标准。
  19. 在设计中不要直接使用数字,作为例外,可以使用0和1。建议采用参数定义代替直接的数字。
  20. 不要在源代码中使用嵌入式的dc_shell综合命令。
  21. 在设计中避免实例化具体的门级电路。
  22. 避免冗长的逻辑和表达式。
  23. 避免采用内部三态电路,建议用多路选择电路代替内部三态电路。
Contex-M3寄存器组整理 看我以前的博客,关于ARM 寄存器和汇编,我之前写过和写过相关的博客至少有三次,可是实际情况却是过了一两年就基本忘了,感觉之前学的都是囫囵吞枣,没有真正的明白,也许学习就是这样,一开始只能记个大概,多看几遍多用几遍也许就理解了。每次看到汇编的地方,必然就会想起R0-R15寄存器的意思是啥。 阅读详情

相关推荐

保姆级教程:用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信(附完整代码)

本文详细介绍了如何利用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信,涵盖硬件连接、寄存器配置、时序优化及FPGA接口设计等关键步骤。通过实例代码和调试技巧,帮助开发者快速掌握高效数据交互技术,提升嵌入式系统设计能力。

weixin_26918763的博客 226

FPGA/CPLD学习心得体会-送给入门学习的你(后附郭天祥FPGA视频教程)

FPGA在目前应用领域非常,在目前的单板设计里面,几乎都可以看到它的身影。从简单的逻辑组合,到高端的图像、通信协议处理,从单片逻辑到复杂的ASIC原型验证,从小家电到航天器,都可以看到FPGA应用,它的优点在这里无庸赘述。从个人实用角度看,对于学生,掌握FPGA可以找到一份很好的工作,对于有经验的工作人员,使用fgpa可以让设计变得非常有灵活性。掌握了fpga的设计,单板硬件设计就非常容易(不是系...

从零开始学单片机的博客 2087

告别误唤醒!S32K3xx低功耗设计避坑指南:Fast Standby模式与WISR寄存器操作详解

本文深入解析了NXP S32K3xx系列MCU在低功耗设计中常见的误唤醒问题,并提供了基于Fast Standby模式的解决方案。文章重点剖析了DCMRWF5寄存器的配置方法、WISR/WISR_64唤醒中断状态寄存器的标志位处理策略,以及如何利用32KB Standby SRAM保存唤醒状态,从而帮助开发者构建稳定可靠的汽车电子低功耗系统。

weixin_29163857的博客 361

Verilog HDL运算符

一、逻辑运算符:&&:逻辑与; ||:逻辑或; !:逻辑非。 二、关系运算符:==:逻辑相等; !=:逻辑不等; ===:全等; !==:不全等。 "==="和"!=="可以比较含有x和z的操作数,在模块的功能仿真中有着广泛的应用。三、位运算符:~:非; &:与; |:或; ^:异或; ^~:同或。 四

昔日之的专栏 3万+

SDFCOM_SWC警告深度剖析:从assign短路到时序标注失效的链路追踪

本文深入剖析了SDFCOM_SWC警告的根源,从assign短路到时序标注失效的全链路追踪。通过分析RTL设计中的assign语句陷阱、综合阶段的优化变形以及PrimeTime生成SDF文件的视角,提出了重构RTL设计、警告抑制和SDF生成优化等解决方案,帮助工程师有效避免时序标注问题。

weixin_42519985的博客 363

SAP 销售订单及发票 利润中心替代 Userexit出口 配置及程序

在跨公司销售业务中,跨公司销售订单的发票时无法从销售订单中将利润中心带到发票中,所以在跨公司的发票创建过程中需要配置出口来获取对应销售订单行项目的利润中心。 事务代码: 0KEM 配置步骤: 1、创建一个新的替代 2、创建一个步骤 3、维护一个先决条件,比如针对于特定工厂 PCASUB-VKBUR = '0001' 4、选择替代程序FORM,FORM必须为指定程序中存在的FORM名 5、编辑替代程序FORM 实现效果: 在程序FORM中打上断点 ...

李威威wiwi的博客 5069

Verilog HDL仿真激励的产生

一、变量初始化变量初始化的基本原则为:可综合代码中完成内部变量的初始化,Testbench中完成可综合代码所需的各类接口信号的初始化。初始化的方法有两种:一种是通过initial语句块初始化;另一种是在定义时直接初始化。当initial语句块中有多条语句时,需要用begin…end或者fork…join语句。直接初始化,如:reg [7:0] cnt = 8b00000000

昔日之的专栏 2万+

AD22等长布线规则

本文介绍了PCB布线中实现信号线等长的详细操作步骤:1.创建网络类(NetClass),将需要等长的信号线归入同一组;2.设置高速布线规则(High-SpeedRule),定义等长容差等参数;3.进行交互式等长布线(InteractiveLengthTuning),使用蛇形线调整线长;4.实时调整与最终检查,确保所有网络满足等长要求。文中还提供了实用技巧,如使用快捷键调整蛇形线参数、为关键信号设置更严格规则等。操作需在PCB设计软件中完成,通过统一管理、规则设置和精确调整来实现信号同步传输。

whm128的博客 1557

Verilog HDL数据类型

Verilog HDL的数据类型分为两大类:线网类型和寄存器类型。线网类型主要表示Verilog HDL中结构化元件之间的物理连线,其数值由驱动元件决定。如果没有驱动元件接到线网上,则其默认值为高阻z。寄存器类型主要表示数据的存储单元,其默认值为不定x。二者最大的区别在于:寄存器类型数据保持最后一次的赋值,而线网类型数据则需要持续的驱动。 一、线网类型:wire:标准连线(默认为该

昔日之的专栏 1万+

PX4控制云台的两种方式 方法适用控舵机 控灯

云台控制插件是mount_control,运行mavros启动文件的时候需要注意该插件是否正常启动,需要在px4_pluginlists.yaml配置文件中将mount_control从blacklisted中移除后才可启动。后会默认占用AUX端口1-4,此时通过AUX通道1-4输出PWM控制信号至云台,对应的RC通道映射功能失效。控制信号输入为RC 则接收机必须连接对应的通道至AUX辅助通道,并通过MNT_MAN_*参数设置pitch/roll/yaw对应的AUX通道。配置为AUTO或MAVLINK,

z1872385的博客 3668

【AutoSAR CAN】04 - 如何使用Davinci Configurator Pro工具配置CAN的波特率

改参数为Tx Arbitration start delay value ,可用于延迟仲裁过程的起始点,用来补偿CAN收发器及线路的传输延迟,以优化传输性能。有关详细信息,请参阅硬件手册。该参数指定采样点模式,即选择多少个采样点的数量,如果选择了每比特三个样本选项,则该点标记第三个样本的位置;我们要配置CAN的波特率,其实就是要弄明白 CAN 控制器的位时序即可,具体的理论部分和EB的配置部门可参考文章《该参数表示传播延迟有多少个时间单位Tq,即上文中的Propagation delay/PROGSEG。.

2601

Verilog HDL常用的行为仿真描述语句(三)

三、wait语句wait语句是一种不可综合的电平触发事件控制语句,有如下两种形式: wait(条件表达式) 语句/语句块;wait(条件表达式);对于第一种形式,语句块可以是串行块(begin…end)或并行块(fork…join)。当逻辑表达式为“真”时,语句块立即得到执行;否则,暂停进程并等待,直到逻辑表达式变为“真”,再开始执行。对于第二种形式,当仿真执行

昔日之的专栏 1万+

基于Python的IMF经济数据爬取与分析:从入门到实战

本文详细介绍了如何使用Python爬取国际货币基金组织(IMF)的经济数据,包括最新的爬虫技术、反反爬策略、数据解析与存储方法。文章从IMF数据源分析开始,逐步讲解如何构建一个完整的爬虫系统,并提供了详细的代码实现和优化建议。通过本文,读者将掌握爬取复杂国际组织数据的关键技术,并能将这些技术应用于其他类似的数据获取场景。关键词:Python爬虫、IMF数据、经济数据获取、数据清洗、反爬策略IMF Data (data.imf.org) - 主要数据门户。

2201_76125261的博客 1439

一个简单的2选1数据选择器的测试平台(Testbench)

`include "mux2.v" module t; reg ain, bin, sel; reg clk; wire outw;initial // 把寄存器变量初始化为确定值 begin ain = 0; bin = 0; sel = 0; clk = 0; endalways #50 clk = ~clk; // 产生一个不断

昔日之的专栏 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Verilog HDL中的延迟控制语句

延迟语句用于对各条语句的执行时间进行控制,从而快速满足用户时序的要求。 Verilog HDL语言中延时控制的语法格式有两类: # 行为语句; #; 其中,“#”是延迟控制的关键字符,可以是直接指定的延迟时间量,并以多少个仿真时间单位的形式给出。延迟时间可以是常量数字,也可以是表达式或变量。

昔日之的专栏 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Verilog HDL的编译预处理语句

一、宏定义define语句 包括宏定义指令包括:define和undef。 声明语法格式:define 在代码中的应用格式:macro_name   和parameter的区别: 作用域不同:parameter作用于声明的那个文件。而define的作用范围从编译器读到define语句开始,到undef语句结束。可以超过单个文件的

昔日之的专栏 1万+

Verilog HDL的Testbench简介

Testbench模块没有输入输出,在Testbench模块内例化待测设计的顶层模块,并把测试行为的代码封装在内,直接对测试系统提供测试激励。下面是一个基本的Testbench结构模块: module testbench;     // 数据类型声明     // 对被测试模块实例化     // 产生测试激励     // 对输出响应进行收集 endmodu

昔日之的专栏 9583

Verilog HDL的任务和函数

Technorati 标签: FPGA,CPLD,Verilog HDL 任务和函数只能实现组合逻辑,而对时序逻辑无能为力。 一、任务 任务就是一段封装在“task…endtask”之间的程序。任务可以彼此调用,而且任务内还可以调用函数。 1、任务定义 形式如下: task task_id;   // 任务名     [declaration]

昔日之的专栏 6233

关于FPGA/CPLD的VCCINT与VCCIO

VCCINT:Supply voltage for internal logic and input buffers,即为内部逻辑电路和输入缓冲提供电压。VCCIO:Supply voltage for output buffers,即为输出缓冲提供电压。 一般说来,VCCINT为1.2V,而VCCIO有3.3、2.5、1.8、1.5几种。

昔日之的专栏 6217

Verilog HDL常用的行为仿真描述语句(二)

二、force和release语句 force/release语句用来跨越进程对一个寄存器或一个电路网络进行赋值。 force语句可为寄存器类型和线网类型变量强制赋值。 当应用于寄存器变量时,寄存器当前值被force覆盖;当release语句应用于寄存器变量时,寄存器当前值将保持不变,知道重新赋值。 当force语句应用于线网变量时,数值立即被force覆盖;当relea

昔日之的专栏 5323

Verilog HDL语言的用户自定义元件

Verilog HDL语言提供了一种扩展基元的方法,允许用户自己定义元件(User Defined Primitives,UDP)。通过UDP,可以把一块组合逻辑电路或时序逻辑电路封装在一个UDP内,并把这个UDP作为一个基本门元件来使用。需要注意的是,UDP是不能综合的,只能用来仿真。 1、定义UDP的语法: primitive 元件名(输出端口名, 输入端口名1, 输入端口名2,…)

昔日之的专栏 2935

Verilog HDL分层事件队列

昔日之的专栏 2878

如何根据项目选择FPGA/CPLD器件

一、CPLD还是FPGAFPGA适合完成时序逻辑,CPLD适合完成各种算法和组合逻辑;CPLD的时序延时是均匀的和可预测的,而FPGA的布线结构决定了其延时的不可预测性;FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现;CPLD无需外部存储器芯片,而FPGA的编程信息需存放在外部存储器上,使用方法复杂;CPLD保密性比FPGA强;一般情况下,CPLD的功耗要

昔日之的专栏 2855

【STM32】 ADC 完全指南:从模拟信号采样量化到五大架构原理

本文系统介绍ADC核心概念与五大主流架构。模拟信号具时间与幅值连续性,需经采样(满足奈奎斯特准则防混叠)、量化(引入±1/2LSB误差,SNR≈6.02N+1.76dB)、编码三步转为数字信号。重点解析Flash(并行高速但受限于比较器数量)、SAR(逐次逼近,低功耗适合MCU如STM32)、双积分(高精度抗工频,用于万用表)、流水线(高速吞吐)及Σ-Δ(高分辨率,靠过采样与噪声整形)五类架构原理、优缺点与应用场景。强调分辨率≠精度,选型本质是速度、精度、功耗与面积的权衡。

专注后端与底层技术,分享实战干货与学习笔记,梦想进入字节跳动,步履不停,热爱不止。 441

18.STM32F103C8T6时钟系统基础

本文以电脑与单片机类比,阐释时钟系统在嵌入式开发中的核心作用。单片机内核类比CPU,AHB/APB类比PCle与USB接口,Flash与RAM对应硬盘与内存。通过CubeMX配置时钟,从8MHz内部时钟到72MHz外部晶振,改变HCLK影响主频,进而改变板载LED闪烁速度。分析for循环耗时:虽理论800万次循环应耗1秒,但实际受指令周期、编译优化(可能删除空循环)、数据类型及中断影响,耗时可达数秒或趋近零。强调时钟频率决定“心跳”,但精准定时需考虑多因素,验证时钟差异需依赖实际配置调整。

2603_94865212的博客 213

基于STM32的智能浇花系统

本文设计基于STM32F103C8T6的智能浇花系统,集成DHT11、YL-69、MQ-135、GL5528四类传感器,实现温湿度、土壤湿度、CO₂浓度与光照的实时监测。系统支持自动、手动、远程三模式联动控制,通过ESP8266-01S以MQTT协议上云,配合手机APP实现数据可视化与远程指令下发。硬件采用多通道ADC采样、继电器驱动与OLED显示,软件实现精准时序控制与双向通信。测试表明系统稳定可靠,完整覆盖“感知—控制—云联”IoT全链路,具备高扩展性与工程实践价值。

weixin_45732499的博客 171
上一篇: FPGA芯片配置方式详解与选择
下一篇: Cyclone II 器件的外部存储器接口
formerman
博客等级 码龄20年 58粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值