Verilog HDL
ascend__a1
早起的菜鸟有虫吃
展开
-
CRC5的verilog实现(X5+X2+X0)
1.原理简介 在USB通信中,CRC5的计算只是针对地址和终点数据字段。如图1所示。图1 USB数据帧格式 CRC5的电路通过异或逻辑和触发器实现。图2说明了CRC5循环冗余校验的编码器/解码器的示例电路,该电路采用多项式X5+X2+X0。要进行循环冗余校验,首先要将整个循环冗余校验寄存器crc5_o[4:0]预置为00000,然后在时钟clk的驱动翻译 2013-10-06 21:44:57 · 5810 阅读 · 1 评论 -
matlab和FPGA中无符号数和有符号数的转化(转)
在FPGA 设计过程中经常会遇到关于数表示之间的转化问题,最常见的是无符号数和有符号数之间的转化问题。(1)在FPGA设计过程中,能够很直接的看出数字的位宽,但经常以无符号数的形式输出,在后继的处理中往往要将之转化为有符号数(如:计算频谱):对于一个比特宽度为W的有符号数,其值往往可以表示为(令W = 4): -1*b3*2^3 + b2*2^2 + b1*2^1 + b0*2^转载 2014-03-13 09:08:22 · 3194 阅读 · 0 评论 -
FPGA 补码存在的意义
每一个人都有存在的意义, 有的人用一生的时间去寻找自己的存在意义, 有的人则是经过生活的大反转,看到了自己存在意义,有的人则不闻不问 ... 当然补码也有存在的意义, 补码存在的意义, 就是避免计算机去做减法的操作。 为什么数字电路中要使用补码呢?因为:作减法运算时,如果两个数是用原码表示的,则首先需要比较两数绝对值的大小,然后以绝对值大的一个作为被减数、绝对值小的一个作为减数,求出差值,并以转载 2014-03-13 09:09:50 · 2742 阅读 · 0 评论 -
FPGA 有符号,无符号
test_signed.vmodule test_signed(clk,data_out); parameter Data_OUT_WIDTH = 5; input clk;// output signed[Data_OUT_WIDTH - 1 : 0]data_out; output [Data_OUT_WIDTH - 1 : 0]data_out; assign d转载 2014-03-13 09:12:35 · 2565 阅读 · 0 评论 -
Verilog HDL无符号数和有符号数运算
执行算术操作和赋值时,注意哪些操作数为无符号数、哪些操作数为有符号数非常重要。无符号数存储在:* 线网* 一般寄存器* 基数格式表示形式的整数 有符号数存储在:* 整数寄存器* 十进制形式的整数 下面是一些赋值语句的实例:reg [0:5] Bar;integer Tab;. . .Bar = -4转载 2014-03-13 09:33:10 · 5974 阅读 · 2 评论 -
基于matlab FPGA verilog的FIR滤波器设计
FIR滤波器说明FPGA verilog的FIR滤波器设计(原创)" title="基于matlab FPGA verilog的FIR滤波器设计(原创)" style="margin:0px; padding:0px; border:0px; list-style:none">FPGA verilog的FIR滤波器设计(原创)" title="基于matlab FPGA ver转载 2014-03-13 17:01:02 · 4660 阅读 · 0 评论 -
Wire与Reg的使用方式测试报告
1、基本测试项语法测试结果说明组合:=(assign/initial/always_with_no_clk) assign用且仅用=,左值用且仅用wireinitial和always左值用且仅用reg,=和都可以,但是一般情况下,组合用=,时序用时序:(always_with_c转载 2014-03-18 23:52:23 · 2133 阅读 · 0 评论 -
verilog中阻塞赋值和非阻塞赋值的区别
1、阻塞赋值操作符用等号(即 = )表示。“阻塞”是指在进程语句(initial和always)中,当前的赋值语句阻断了其后的语句,也就是说后面的语句必须等到当前的赋值语句执行完毕才能执行。而且阻塞赋值可以看成是一步完成的,即:计算等号右边的值并同时赋给左边变量。例如:当执行“x=next_x;”时,x会立即的到next_x的值。而下一句“y=x;”必须等到转载 2014-03-19 00:17:35 · 17090 阅读 · 6 评论 -
用Matlab生成txt格式波形数据
在用Modelsim仿真时,testbench设计时常会用到系统任务$readmemb和$readmemh,可以从txt文件读取二进制或者是十六进制数据,作为仿真激励。原始数据的生成可以借助Matlab实现,通过Matlab可以生成需要的波形,Matlab中的fopen和fprintf函数可以生成txt格式文件,并将波形数据以整型(%d)实数(%f)十六进制(%x)格式存入txt文件,但是需要注意原创 2014-03-19 16:01:52 · 10514 阅读 · 0 评论 -
三段式状态机的第一个输出状态
设计状态机时需要明确状态机各个状态是如何跳转的,要知道状态机是从哪一个状态开始输出的。 常用的三段式状态机设计一般采用三个alway语句: 1.第一个always语句描述时序逻辑,采用同步时序描述状态转移,更新current_state。 2.第二个always语句采用组合逻辑的方式判断状态转移条件、描述状态转移规律,根据current_state和输入条原创 2014-03-22 20:09:57 · 1752 阅读 · 1 评论 -
状态机设计
参考了网上的一些前辈blog和自己搜集到的资料,整理了一下读书笔记,虽然内容基本上都是别人写的,但是整理起来也好累 = =1. 有限状态机FSM(Finite State Machine)组成元素:输入、状态、状态转移条件、输出;可以分为两类:Mealy状态机:时序逻辑的输出不仅取决于当前状态,还与输入有关;Moore状态机:时序转载 2014-03-22 09:18:47 · 5626 阅读 · 2 评论 -
fpga中从有符号数、无符号数衍生
在设计中,所有的算数运算符都是按照无符号数进行的。如果要完成有符号数计算,对于加、减操作通过补码处理即可用无符号加法完成。对于乘法操作,无符号数直接采用“*”运算符,有符号数运算可通过定义输出为 signed 来处理。通过“*”运算符完成有符号数的乘法运算。module ceshi (out, clk, a, b); output [15:0] out;转载 2014-03-13 08:59:00 · 1488 阅读 · 0 评论 -
FPGA中的锁存器(latch)、触发器(Flip-flop)、寄存器(register)(待补充)
latch 是电平触发,register 是边沿触发,register 在同一时钟边沿触发下动作,符合同 步电路的设计思想,而 latch 则属于异步电路设计,往往会导致时序分析困难,不适当的应 用 latch 则会大量浪费芯片资源。原创 2014-02-20 15:21:08 · 5146 阅读 · 1 评论 -
Quartus II 和Modelsim联调
QuartusII 从9.0版本就去掉了自带的波形仿真功能,采用第三方软件进行仿真。最常用的就是Modelsim了,本文以Quartus II 10.0和 Modelsim Altera 6.5e为模板讲解如何进行设计的仿真。不同版本的软件在实际仿真时可能略有差别,但原理相通。由于笔者水平有限,欢迎大牛们交流指正。 本文以send.v文件作为被测试的模块。以下是具体的操作流程:原创 2013-10-10 11:17:30 · 4086 阅读 · 0 评论 -
关于verilog中initial和always过程快的执行顺序问题
initial和always是两个基本的过程结构语句,在testbench仿真一开始就立即相互并行执行。通常被动检测响应使用always语句,而主动的产生激励使用initial语句。 那就有一个问题了:既然过程块是并行执行的,那initial和always是一起并行执行的?有没有先后顺序? 实际上 initial块与always 块可看做是顺序执行的。因为在的alw原创 2013-10-10 15:11:45 · 22586 阅读 · 3 评论 -
Verilog中assign的使用
assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。 assign的功能属于组合逻辑的范畴,应用范围可概括为以下三点:(1)持续赋值;(2)连线;(3)对wire型变量赋值,wire是线网,相当于实际的连接线,如果要用assign直接连接,就用wire型变量。wire型变原创 2013-10-25 19:29:16 · 105671 阅读 · 4 评论 -
基于verilog的三段式状态机
三段式状态机的优势:三段式描述方法与一段式和两段式状态机描述相比,虽然代码结构复杂了一些,但是换来的优势是使FSM(Finite State Machine)做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。 需要掌握的是三段式状态机的综合效果。通常,三段式状态机分成三个al转载 2013-10-28 11:15:36 · 2449 阅读 · 0 评论 -
独热码one-hot code
1.独热码概念 独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。通常,在通信网络协议栈中,使用八位或者十六位状态的独热码,且系统占用其中一个状态码,余下的可以供用户使用。 例如,有6个状态的独热码状态编码为:000001,000010,000100,001000,01转载 2014-02-27 16:45:57 · 3907 阅读 · 0 评论 -
FPGA开发技巧之同步复位与异步复位的理解
前两天和师兄讨论了一下design rule其中提到了同步异步复位的比较这个常见问题,据说也是IC公司经常问到的一面试题。后来在网上看了些相关资料,终于在这一点有了比较清晰的感念,眼看就要实习了,唯恐同学们面试时阴沟里翻船,特此将这个问题总结如下(如果你对:你在设计中如何复位?为什么这样复位?这两个问题概念清晰,本贴可以略过)一、概念:同步复位:就是指复位信号只有在时钟上升转载 2014-03-02 11:17:36 · 916 阅读 · 0 评论 -
Building Reliable and Efficint FPGA Designs
Adapt from Frank Nelson,the senior technical trainner and course designer at Xilinx Inc.1.Don't use gate clocks.Don't route clock signals through the Look-Up Tables(LUTs).These "internally genera转载 2014-02-18 23:50:00 · 697 阅读 · 0 评论 -
Verilog 中的for语句
在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别。在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Testbench中for语句在生成激励信号等方面使用较普遍,但在RTL级编码中却很少使用for循环语句。主要原因就是for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,每条执行语原创 2014-02-19 15:11:05 · 6867 阅读 · 0 评论 -
Verilog中reg型变量的综合效果(待补充)
在Verilog中最常用的两种数据类型是wire和reg,一般来说,wire型指定的数据和网线通过组合逻辑实现,而reg型指定的数据不一定用寄存器实现。也就是说reg型数据不一定综合成寄存器。下面的例子中将输出信号Dout定义为reg型,但是综合与实现结果却没有使用FF,该电路是一个纯组合逻辑设计。 module reg_cmd( input Rese原创 2014-02-20 15:13:04 · 3745 阅读 · 2 评论 -
FPGA工程师面试题目网络收集
1、同步电路和异步电路的区别是什么?(仕兰微电子) 2、什么是同步逻辑和异步逻辑?(汉王笔试) 同步逻辑是时钟之间有固定的因果关系.异步逻辑是各时钟之间没有固定的因果关系. 3、什么是"线与"逻辑,要实现它,在硬件特性上有什么具体要求?(汉王笔试) 线与逻辑是两个输出信号相连可以实现与的功能.在硬件上,要用oc门来实现,由于不用 oc门可能使灌电流过大,而烧坏逻辑门. 同时在输出端转载 2014-02-20 15:23:26 · 1775 阅读 · 0 评论 -
Verilog编程规范(补充中)
良好的编程规范可以提高设计人员的工作效率,方便非原作者对代码进行维护。一、命名约定1.文件的名称与模块的名称一致,arbiter.v文件内部模块为module arbiter。2.每个模块用一个文件表示,而且一个文件最多表示一个模块。3.在整个层次化的设计中采用不变的名称,例如在例化的时候,顶层模块和调用的底层模块的变量名称保持一致。 推荐使用如下的例化方式 blo原创 2014-03-26 17:23:13 · 2140 阅读 · 0 评论