
Verilog
文章平均质量分 72
初雪白了头
种一棵树最好的时间一个是五年前,一个是现在~
——麦田守望者
展开
-
Verilog | Round_Robin_Arbiter
重写了权重轮询仲裁,添加lock输入信号,表示请求方收到了仲裁许可,在对应的lock拉低之前,仲裁器不可以开启新的仲裁。原创 2023-07-27 18:39:18 · 1145 阅读 · 0 评论 -
Verilog | if语句和case语句
if语句和组合逻辑下的case语句,他们的条件是有优先级的,从上到下优先级递减,每多一个条件就会多消耗一个二选一多路器,很浪费资源;似乎在AISC中综合后,两者其实是没有区别的,最后的综合结果会以逻辑门的形式实现。(关于这一点还希望有经验的大佬能够指教)而对于时序语句中的case,会被综合成n选一多路器,条件没有优先级,占用的资源更少。优先级:if else 结构if的优先级最高;多if 结构最后一个if优先级最高。从可阅读性来看,case语句的阅读性更好,修改时可能也会更加方便。原创 2023-07-22 16:54:44 · 1354 阅读 · 0 评论 -
Verilog | 多语言交互接口
Verilog中使用编程语言接口)编程语言接口来和C语言程序交互,它提供了一套C语言函数,我们可以调用这些集成函数编写软件C程序。RTL代码编译的时候,这些软件C程序也会集成到仿真环境中。仿真运行后,使用系统任务调用的方式,就可以去访问仿真中的数据结构,也就是说PLI提供一个使得用户自带C函数能够在运行时间访问仿真数据结构的接口。,第一代Verilog PLI。包含一整套C语言函数库,函数定义在verisuer.h文件中,一般称为TF子程序,主要作用是把任务/函数参数传递给C函数。原创 2023-07-20 09:30:15 · 815 阅读 · 0 评论 -
Verilog | 除法--试商法
采用试商法实现除法运算,对于32位的除法,需要至少32个时钟周期才能得到除法结果。下面是试商法的一般过程。设被除数是m,除数是n,商保存在s中,被除数的位数是k,其计算步骤如下(为了便于说明,在此处将所有数据的最低位称为第1位,而不称为第0位)。1、取出被除数的最高位m[k],使用被除数的最高位减去除数n,如果结果大于等于0,则商的s[k]为1,反之为0。2、如果上一步得出的结果是0,表示当前的被减数小于除数,则取出被除数剩下的值的最高位m[k-1],与当前被减数组合做为下一轮的被减数;原创 2023-06-23 15:11:02 · 3073 阅读 · 0 评论 -
Verilog | 基4 booth乘法器
基4booth乘法器,Verilog实现原创 2023-06-18 14:27:07 · 2727 阅读 · 1 评论 -
Verilog | FIFO简单实现
FIFO( First Input First Output)简单说就是指先进先出,也是缓存机制的一种,下面是我总结的 FIFO 的三大用途:1)提高传输效率,增加 DDR 带宽的利用率。比如我们有 4 路视频数据缓存到 DDR 中去,比较笨的方法是,每个通道视频数据对应一颗 DDR。现在对于 DDR 来说非常浪费,因为现在的 DDR3 可以跑 1600Mbps DDR4 可以跑到2400Mbps,如果你还是把一路视频数据对应一颗 DDR 显然严重浪费了带宽。原创 2023-05-25 22:00:00 · 2920 阅读 · 0 评论 -
Verilog | 轮询仲裁
当多个源和用户需要共享同一资源时,需要某种仲裁形式,使得所有用户基于一定的规则或算法得到获取或访问共享资源的机会。第一种方法是为每个用户分配一个变量,该变量决定了在一个轮询周期内该用户能够得到许可(被授权)的次数。该变量是可以通过软件编程进行修改的,因此其轮询权重也可以相应调整。例如,有三个用户,agent0权重为3、agentl权重为2、agent2权重为1。在一个轮询周期中,agent0最大可以得到3次许可,agent1可以得到2次许可,agent22可以得到1次许可。原创 2023-04-13 19:24:41 · 3434 阅读 · 0 评论 -
Verilog | 二进制与格雷码
格雷码是一个叫弗兰克·格雷的人在 1953 年发明的,最初用于通信。格雷码是一种循环二进制码或者叫作反射二进制码。格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点,就可以。原创 2023-04-13 19:16:26 · 1370 阅读 · 0 评论 -
Verilog | 公约数与公倍数
最小公倍数可以通过两个数的乘积除以两个数的最小公约数得到。乘法是容易计算的,所以问题变成如何求解最大公约数。可以采用辗转相减法求解,例如 :两个自然数35和14,用大数减去小数,(35,14)->(21,14)->(7,14),此时,7小于14,要做一次交换,把14作为被减数,即(14,7)->(7,7),再做一次相减,结果为0,这样也就求出了最大公约数7。原创 2023-04-12 21:05:44 · 363 阅读 · 0 评论 -
Verilog | 负数补码与状态机
摩尔(Moore)状态机:当前输出只与当前状态有关米利(Mealy)状态机:当前输出不仅与当前状态有关,还与当前输入有关。原创 2023-04-08 20:39:02 · 500 阅读 · 0 评论 -
有符号加法运算
(因为得到的结果是补码,需要转化为原码后再输出。转换方法:判断符号位,如果符号位为0,表明是一个正数,则直接输出(正数原码和补码相等)。如果符号位是1,表明是一个负数,需要符号位不变,有效位取反加一后再输出(补码变原码)。(因为得到的结果是补码,需要转化为原码后再输出。转换方法:判断符号位,如果符号位为0,表明是一个正数,则直接输出(正数原码和补码相等)。如果符号位是1,表明是一个负数,需要符号位不变,有效位取反加一后再输出(补码变原码)。step4:扩展符号位到输出结果的位宽,然后直接进行运算。原创 2023-04-08 20:32:28 · 930 阅读 · 0 评论 -
Verilog | 加法器实现
全加器是指对输入的两个二进制数相加(A与B)同时会输入一个低位传来的进位(Ci-1),得到和数(SUM)和进位(Ci);一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。常用二进制四位全加器74LS283。原创 2023-03-28 17:28:48 · 1783 阅读 · 0 评论 -
Verilog | 看门狗
也称看门狗定时器,是常见于系统的一种外设;看门狗似乎就是一条看门的狗,如果系统一切正常则看门狗不叫,如果程序不正常,则看门狗则会将程序咬死(即程序强制复位)。原创 2023-03-27 21:26:24 · 2805 阅读 · 0 评论 -
Verilog | 分频电路实现
简单总结了一些分频电路的知识。分频电路也分为多种,包括偶数分频、奇数分频和小数分频。从实现方式上来讲,可以使用计数器或者是触发器实现。原创 2023-03-14 22:31:11 · 3716 阅读 · 2 评论 -
Verilog | 4位数值比较器
4位数值比较器,门级电路表示,使用两种方法实现原创 2023-03-08 21:43:13 · 5336 阅读 · 0 评论 -
Verilog | 维特比译码
Viterbi 算法是基于卷积码网络图的最大似然译码算法,根据已经接收到的信息,得到最接近编码码字的一种译码码字。一般采用汉明距离作为判决指标。具有最小汉明距离和的路径就是译码的最大路径,该路径被称作幸存路径。Viterbi 译码算法步骤如下:① 在时刻 l=L-1 之前,计算每一个状态单个路径分支度量。时刻 l=L-1 时,网络图充满状态,路径存储器 PM 和路径度量存储器 MM 在时刻 0 到时刻 L-1 进行初始化。原创 2023-03-07 22:51:00 · 5756 阅读 · 4 评论 -
Verilog | 卷积码实现
以(n,k,m)或者(n,k,L)来描述卷积码,其中k为每次输入到卷积编码器的bit数,n为每个k元组码字对应的卷积码输出n元组码字,m为编码存储度,也就是卷积编码器的k元组的级数,称m+1= L为编码约束度m称为约束长度。与分组码不同,卷积码编码生成的n元组元不仅与当前输入的k元组有关,还与前面m-1个输入的k元组有关,编码过程中互相关联的码元个数为n*m。和普通的卷积编码相比,咬尾的方案最大的优点是克服了编码时的码率损失,并且适合迭代译码,不过付出的代价是译码复杂度的增加。其中最重要的就是网络图。原创 2023-03-07 22:46:48 · 2732 阅读 · 0 评论 -
Verilog | M序列发生器
最长线性反馈移位寄存器序列的简称。是一种反馈移位型结构的电路,由n个移位寄存器加异或反馈网络组成,反馈多项式为本原多项式,其最大序列长度M2n−1。是一种伪随机序列、伪噪声码。伪随机序列:不能预先确定但可以重复实现的序列。本原多项式:若反馈移位寄存器的特征多项式为本原多项式,则移位寄存器能产生m序列。若一个n次多项式f(x)满足:1)既约的:不能再因式分解;2)可整除(xm1),M2n−1;3)除不尽xq1, q < m;则称:f(x)为本原多项式。原创 2023-03-07 22:44:49 · 3757 阅读 · 0 评论 -
Verilog | SPI通信
SPI 串行同步时钟可以设置为不同的极性(Clock Polarity ,CPOL)与相位(Clock Phase ,CPHA)。时钟的极性(CPOL)用来决定在总线空闲时,同步时钟(SCK)信号线上的电位是高电平还是低电平。时钟由 Master 控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后 (SCLK串行时钟线空闲是为高电平,数据在SCLK时钟的。SCLK串行时钟线空闲是为高电平,数据在SCLK时钟的。当时钟相位为 0 时(CPHA=0),在 SCK 信号线的第一个跳变沿进行采样。原创 2023-02-07 22:27:46 · 1420 阅读 · 0 评论 -
Verilog | I2C详解与Verilog实现
IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,是一种同步、半双工的通信总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。IIC数据传输速率。原创 2022-11-28 14:07:50 · 16181 阅读 · 32 评论 -
Verilog | UART接口实现
UART接口协议是一种比较简单、非常常用的一种接口协议,使用它的场景很常见,是我们学习FPGA一定要会的接口协议。原创 2022-11-28 13:53:16 · 2903 阅读 · 3 评论 -
FPGA-基本通信协议
单工:通信只能从发送方到接收方,不能从接收方发送数据,也就是数据只能单向发送;半双工:数据可以双向通信,但不能同时双向通信,一个时刻只能有一个方向上通信;波特率:用于描述串口通信时的通信速度,指每秒可以发送的bit(位)的数量;双工:数据可以同时,双向通信;并行:是指每次发送多位数据;串行:一次只发送一位数据;UART、I2C、SPI通信的对比原创 2022-11-28 13:47:18 · 1944 阅读 · 3 评论 -
电平标准记录
TTL、CMOS、USB电平标准记录TTL:Transistor-Transistor Logic 三极管结构。CMOS使用注意:CMOS结构内部寄生有可控硅结构,当输入或输入管脚高于VCC一定值(比如一些芯片是0.7V)时,电流足够大的话,可能引起闩锁效应,导致芯片的烧毁。因为2.4V与5V之间还有很大空闲,对改善噪声容限并没什么好处,又会白白增大系统功耗,还会影响速度。原创 2022-11-22 10:48:23 · 147 阅读 · 0 评论 -
Verilog | 运算符优先级
记录了Verilog和VHDL中运算符的优先级,方便查阅使用。Verilog运算符VHDL中运算符原创 2022-11-21 19:54:11 · 738 阅读 · 0 评论 -
常用的系统任务
记录常用的系统任务,包括用于文件输出、显示层次、选通显示、存储器初始化和值变转储的系统任务。原创 2022-11-21 09:56:43 · 442 阅读 · 0 评论 -
task和function说明语句
task和function说明语句分别用来定义任务和函数,利用任务和函数可以把一个很大的程序模块分解成许多较小的任务和函数便于理解和调试。输入、输出和总线信号的值可以传入、传出任务和函数。任务和函数往往在大的程序模块中和在不同位置多次用到的相同的程序段。函数和任务中所有声明的变量地址空间都是静态分配的,因此如果在一个模块中多次调用任务时,可能会造成地址空间的冲突,这也意味着可以通过再次调用的方式重置任务。原创 2022-11-21 09:41:49 · 469 阅读 · 0 评论 -
Verilog | 参数化模块调用
在进行模块调用时,有时需要修改模块中的参数,这个时候就需要进行参数化模块调用。当一个模块被另一个模块引用例化时,高层模块可以对低层模块的参数值进行改写。这样就允许在编译时将不同的参数传递给多个相同名字的模块,而不用单独为只有参数不同的多个模块再新建文件。原创 2022-11-14 14:19:20 · 4599 阅读 · 0 评论 -
Verilog | for语句的理解与使用
for语句在硬件里的使用并不频繁,一方面是因为for语句循环几次,就是将相同的电路复制几次,因此循环次数越多,占用面积越大, 综合就越慢,for语句的使用就很占用硬件资源,另一方面是因为在设计中往往是采用时序逻辑设计用到for循环的地方不多。通过流水线乘法的示例对for语句进行理解。原创 2022-11-07 09:43:38 · 9333 阅读 · 0 评论 -
Verilog | 序列检测
序列检测两种解法,一种是状态机写法, 一种是移位寄存器写法。原创 2022-10-31 17:45:30 · 857 阅读 · 0 评论 -
verilog | 模块与端口
端口:模块与外界环境交互的接口。所有端口隐含地声明为wire类型。若希望输出端口保存数值,则需要显式的声明为reg类型;输入与双向端口不能被声明为reg类型。2、命名端口连接:端口和相应的外部信号按照其名字进行连接,其中括号内部的是该模块的端口,括号外部的是原模块的端口(即下面的fulladd4的端口)。1、顺序端口连接:需要连接到模块实例的信号必须与模块声明时目标端口在端口列表中的位置保持一致。3、允许模块实例的端口保持未连接状态,例如作为测试端口。inout:输入/输出双向端口;转载 2022-10-26 16:12:43 · 1882 阅读 · 0 评论