RTL基本知识:Verilog常见错误

【问题描述】【问题一】过程性赋值语句左侧信号没有声明为reg或者logic类型,而是声明为了线网类型,例如:【问题二】使用begin-end没有配对使用,导致语句执行与预期不相符,特别是在条件表达式中,例如:【问题三】进行常量赋值时,没有执行相应的数制,可能导致结果与预期不一致。例如:【问题四】语句结尾缺失当前行结束标志“;”,将会导致编译失败。例如:【问题五】混用“‘”(位于回车键旁)和“`”(
阅读本文

verilog语法之memory存储器

命名规则:reg[n-1:0] 存储器名[m-1:0]说明:这是m个n位的存储器,该存储器的地址范围是0-(m-1)举例:reg[3:0] memo[255:0]说明:这是256个4位存储器,该存储器地址范围是0-255赋值:memo[200] = 4‘b1010;说明:给第200地址单元赋值4‘b1010;精确到位:memo[56][2]说明:第56地址的第2位数据赋值:wire data=me
阅读本文

verilog中参数传递与参数定义中#的作用(二)

一、module内部有效的定义     用parameter来定义一个标志符代表一个常量,称作符号常量,他可以提高程序的可读性和可维护性。parameter是参数型数据的关键字,在每一个赋值语句的右边都必须是一个常数表达式。即该表达式只能包含数字或先前已经定义的参数。parameter     msb=7;                 //定义参数msb=7parameter     r=5.
阅读本文

堆排序的比较器实现

一、堆定义最小堆:任一结点的关键码均小于等于它的左右孩子的关键码,位于堆顶结点的关键码最小;最大堆:任一结点的关键码均大于等于它的左右孩子的关键码,位于堆顶结点的关键码最大。  堆存储在下标为0开始计数的数组中,因此在堆中给定下标为i的结点时: 1、如果i=0,结点i是根节点,没有双亲节点;否则结点i的双亲结点为结点(i-1)/2 2、如果2*i+1>n-1,则结点i无左孩子,否则结点i的左孩子为
阅读本文

verilog 顶层模块的实例

比如工程名为converter,顶层文件名为converter.v,子模块为sw.v,顶层文件架构为:module converte(reset,dte_xtc,mclk,rclk,cable_sel,code_sel,clk_sel,cts_s,dte_rts,llb,rlb,rcl,tclk,ets,rt,l,loop,hbe,ctso,dsro,dcdo,tst_led);input res
阅读本文

Verilog学习笔记基本语法篇(十三)...............Gate门

Verilog中已有一些建立好的逻辑门和开关的模型。在所涉及的模块中,可通过实例引用这些门与开关模型,从而对模块进行结构化的描述。逻辑门:and (output,input,...)  nand (output,input,...)or (output,input,...)nor (output,input,...)xor (output,input,...)xnor (output,input,
阅读本文

关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

关键词:  ·技巧篇:      组合逻辑输出类型选择;      语法上的变量交换;   ·易忘篇:      case/casex/casez语句;      循环语句;      数制和操作符;      数据类型;   ·易错:      数据的截位与扩位      子模块例化中隐式线网赋值技巧篇:  1、组合逻辑输出:描述一个纯组合逻辑电路时,尽量不要把输出定义成输出类型,例如描述
阅读本文

FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比

SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型、结构、压缩和非压缩数组、 接口、断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力。SystemVerilog由Accellera开发,它主要定位
阅读本文

uvm_hdl——DPI在UVM中的实现(四)

我们可以在uvm中实现HDL的后门访问,具体包括的function有uvm_hdl_check_path,uvm_hdl_deposit, uvm_hdl_force,uvm_hdl_release,uvm_hdl_read, task 有uvm_hdl_force_time。 这么做与直接用SV中force, release 有什么区别,有什么好处?这么做的话函数的输入是字符串而不是HDL(
阅读本文

关于FGPA的复位

关于FGPA的复位当初开始学FPGA的时候,总是疑惑:FPGA不是没有复位管教么,但总在always看到有复位信号。这个复位信号(我们暂且称为rst_n)从哪里来?实际上是可以从两个方面获得的,这与我们的MCU一样。上电自动复位手动按键复位考虑到系统的初始化可能需要一定的时间,需要写一段Verilog代码进行延时复位,这段代码综合后就是上电自动复位的过程,上电自动复位也要外部硬件提供一个低电平脉冲
阅读本文

怎么用Verilog语言描述同步FIFO和异步FIFO

感谢知乎龚大佬打杂大佬网上几个nice的博客(忘了是哪个了。。。。)前言虽然FIFO都有IP可以使用,但理解原理还是自己写一个来得透彻。什么是FIFO?Fist in first out。先入先出的数据缓存器,没有外部读写地址线,可同时读写。规则:永远不要写一个已经写满了的fifo。          永远不要读一个读空了的fifo。 FIFO种类?同步FIFO和异步FIFO。同步FIFO只有一个
阅读本文

FPGA--ISE约束文件UCF语法举例说明

1、普通管脚约束举例##NET rst_n LOC = L3 | IOSTANDARD = “LVCMOS33“;//将rst_n连接到FPGA的L3管脚(最好是将rst_n写成“rst_n”,避免因为使用与约束关键字或设计环境保留字相同的信号名而 产生错误信息);IO管脚的电平约束CMOS电压3.3V## 2、时序约束举例##NET clk LOC = T8 | TNM_NET = sys_cl
阅读本文

Verilog定义计算位宽的函数clogb2

在很多情况下要计算输入输出的位宽,比如你写一个8*8的ram,那么地址需要三位去表示,那么这个函数的方便就体现出来了,你需要使用函数定义就好了,如果对于多文件可以包含定义的文件:如果你的DEPTH是2^n次的话,可以用下面的function,否则要是像DEPTH为7的话,修改for循环中的depth>0。(个人仿真得出,不然都用depth>0的话,DEPTH为8的话,算出来的位宽是4位,而实际上我
阅读本文

如何让自己定义的memory使用fpga自带的memory资源

前言http://quartushelp.altera.com/13.1/mergedProjects/hdl/vlog/vlog_file_dir_ram.htm如果你自己Verilog语言写一个memory,比如下面这样的:1 reg [WIDTH-1:0] memory [0:DEPTH-1];你放在quartus软件中编译一下,你会惊喜的发现,尼玛软件真是太不智能了,竟然用的是d
阅读本文

基于FPGA的肤色识别算法实现

大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现。         我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现。将彩色图像转化为灰度的方法有两种,一个是令RGB三个分量的数值相等,输出后便可以得到灰度图像,另一种是转化为YCbCr格式,将Y分量提取出来,YCbCr格式中的Y分量表示的是图像的亮度
阅读本文

Norflash控制器的Verilog建模之一

摘要:今天驱动一款SPANSION公司生产的norflash——S29AL032D70,没有别的参考资料,大致了解一下norflash的内部cmos电路架构以及其用途之后,直接看手册吧。  如何看手册:拿到手册后满满的英文,很多人看了就泄气,那么如何在浩如烟海的英文里找到实际需要的信息,这一点很关键。因为毕竟是用Verilog建模,不像软件描述那么灵活,很多时候受限于硬件描述的瓶颈,因此一开始
阅读本文

12组第三次作业

我叫胡泽婷,通过问卷调查,清楚的对自己做了一个定论:我在软件这方面算是一个“零蛋”没有做过项目,也不太能听得懂专业术语,只能凭借着网络的资源慢慢壮大自己的知识库和相关软件工程的实战经验。不能编高效率特别神奇的代码,得出可视化或理想的结果,不过幸好在一些算法方面还算是懂一点点皮毛,毕竟是数学出身的孩子。        希望通过软件工程课的学习,平时多多了解专业相关新技术的更新,有规划的进行相关
阅读本文

Verilog 运算符

Verilog 运算1.     Arithmetic Operators(算术运算): + - * / %Attention: 5%2=1; 5%-2=1; -5%2=-1; -5%-2=-1; (只与前面的数符号有关)2.     Bitwise Operators(位运算符): ~(invert),  &(AND),  | (OR) , ^ (Exclusive OR),,~^ ^~ (Ex
阅读本文

Verilog中wire与reg的使用

wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。 reg表示一定要有触发,输出才会反映输入的状态。 reg相当于存储单元,wire相当于物理连线。reg表示一定要有触发,没有输入的时候可以保持原来的值,但不直接实际的硬件电路对应。       两者的区别是:寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动。wire使用在连续赋值语句中,而reg使用在过
阅读本文

简易浮点数加法器的Verilog实现

整理自《基于Nios II的嵌入式SoPC系统设计与Verilog开发实例》(美)Pong P. Chu著2017/9/21 设计需求与设计思路此设计使用13位格式,忽略四舍五入。浮点数表示法包含1位符号位s,1表示为负数;4位指数位e;8位有效数字f。所有格式均采用2进制,即 (-1)s × (0.f) × 2e可表示的范围为0.1×2E0~0.11111111×2E1111。设计思路分为4个步
阅读本文