Verilog小总结】的更多相关文章

Verilog小总结 基础 assign assign作为一个组合逻辑常用的语句,可认为是将电线连接起来,当然它能做的不仅仅是将一个输入直接输出,它能把输入信号进行逻辑运算后再输出.当assign左右两边位宽不相等时,将自动进行零扩展或截断以匹配左边的位宽. eg: module top_module ( input a, input b, input c, input d, output out, output out_n ); wire w1, w2; // Declare two wire…
主要参考了: https://www.cnblogs.com/lsgxeva/p/8280662.html 谢谢! -------------------------------------------------------------------------------------------------------------------- 使用Verilog编写好了功能模块以及对应的testbench之后,一般需要对其功能进行仿真测试.由于工作场合.必须使用正版软件,然而ModelSim…
第一个小module-ex_module module ex_module( input wire sclk,//声明模块的时候input变量一定是wire变量 input wire rst_n,//末尾带有_n或者_b代表低电平有效 input wire [7:0] d, output reg [7:0] q//明模块的时候output变量可以是wire变量,也可以是reg变量 //reg变量必须在always块里赋值 ); //异步D触发器 always@(posedge sclk or n…
1.Verilog中如果wire连接到常量,而常量没有说明他的位宽,那么将会默认为32位 如: input [:] x ; wire [:] a; assign a = + x; 上述代码在综合的时候,会将a扩展成32位进行操作,而事先声明常量位宽将不会出现,如下: input [:] x ; wire [:] a; assign a = d’3 + x; 这一点看起来没什么大不了的,但是有时候却会出现我们想的不一样的结果,请看下面的代码: input [ : ] x; output [ : ]…
(之后还会持续的更新) 移位操作的实现: verilog有一种非常简单的移位操作实例如下: reg [3:0] source; reg out; {out,source[3:0]}={source[3:0],1'b0};//向左移位.且不循环 {source[3:0],out}={1'b0,source[3:0]}//向右移位,且不循环 {out,source[3:0]}={source[3:0],source[3]};//向左循环移位 切记不能使用多驱动对同一个网线进行赋值: 编译verilo…
module ex_case `timescale lns/1ns module ex_case( input wire rst_n, input wire sclk, output reg [7:0] o_dv, output reg [7:0] o_data, //数据输入 input wire [9:0] i_data, input wire [7:0] i_addr ); // reg [2:0] cnt_7; //不同功能的寄存器分开always来写,这样代码的可维护性强,可读性强 a…
module-ex_cnt module ex_cnt( input wire sclk, input wire rst_n, output wire[9:0] cnt ); reg [9:0] cnt_r;//_r 代表reg always@(posedge sclk or negedge rst_n) if(rst_n == 1'b0) cnt_r <= 'd0;//'d0代表32位0,然后截取10位 else cnt_r <= cnt_r + 1'b1; assign cnt = cnt…
5s内15Hz4个LED闪烁,再两秒熄灭,循环往复. 引入en,可以使得4个LED灯全亮,以及恢复周期变化. module led(clk_27MHZ, en, led1, led2, led3, led4); input clk_27MHZ, en; output reg led1, led2, led3, led4; reg[25:0] counter_15HZ; reg[25:0] counter_1HZ; reg[3:0] count_5s, count_7s; reg clk_15HZ…
system task $fopen 的argument 为1.文件名字(可以包含具体的文件路径但是注意用)2.打开方式比如"r"."w"."a"等等. 但注意:文件名字参数不可以是变量,有时候想可以通过改变变量的值,打开多个文件,但这种方法不行,变量无法扩展为具体的文件名字.…
类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型的数值(包括四态数值,电平强度,多驱动解析)自动转换为reg类型(有4态数值,但没有电平强度和多驱动解析). 如果一个real类型被赋值给一个reg类型的变量,浮点数值自动截取为reg字长能够表达的整型数值. 下面这个例子里面,使用临时变量将一个浮点类型结果转换为一个64比特整型值,然后将这个整型值…
转载自:http://blog.sina.com.cn/s/blog_4c270c730101f6mw.html 作者:白栎旸     断言assertion被放在verilog设计中,方便在仿真时查看异常情况.当异常出现时,断言会报警.一般在数字电路设计中都要加入断言,断言占整个设计的比例应不少于30%.以下是断言的语法: 1. SVA的插入位置:在一个.v文件中:                 module ABC ();                    rtl 代码        …
实际系统中常用的按键大部分都是轻触式按键,如下图所示.该按键内部由一个弹簧片和两个固定触点组成,当弹簧片被按下,则两个固定触点接通,按键闭合.弹簧片松开,两个触点断开,按键也就断开了.根据这种按键的机械特性,在按键按下时,会先有一段时间的不稳定期,在这期间,两个触点时而接通,时而断开,我们称之为抖动,当按键大约按下20ms后,两个触点才能处于稳定的闭合状态,按键松开时和闭合时情况类似.而我们的FPGA工作在很高的频率,按键接通或断开时任何一点小的抖动都能轻易的捕捉到,如果不加区分的将每一次闭合或…
[连载] FPGA Verilog HDL 系列实例 Verilog HDL 之 步进电机驱动控制 步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心.那么,下面我们就了解下什么是步进电机,它是怎么控制的. 一.步进电机相关知识简介 1.步进电机概述 步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机.单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动.多相步进电动机有多相方波脉冲驱动,用途很广…
1.Abstract     在同一个模块被多次例化的时候,改变参数构建不同的硬件实体是一个很好的选择.特别是今天帮一个朋友调试一个比较复杂的逻辑,深有体会.这个也是一个小技巧,回来也查了许多资料,强化了一下这方面的知识.前几天也做了一个这样的例子,可以拿过来作为验证一下. 2.Content   2.1 语法说明     defparam 的语法说明如下:     defparam ParameterName = Constant Expression,     ParameterName =…
1.Abstract     前几天做了一个呼吸灯,觉得确实挺有意思的:可惜的是只有一个灯管亮,板子上有四个灯,要是能让这些灯有序地亮起来,那应该更有趣味了!跟传统的一样,逻辑上做成一个流水灯的样式,这种带有PWM调光的吸引样式,真可谓是超级流水灯了.     做这个是在已做好的呼吸灯的基础上进行添加功能的,整理好了也在随笔里边,这里就直接引用出来.     基于Verilog的PWM呼吸灯:http://www.cnblogs.com/hechengfei/p/4106538.html 2.C…
task 和 function 说明语句分别用来定义任务和函数,利用任务和函数可以把函数模块分成许多小的任务和函数便于理解和调试.任务和函数往往还是大的程序模块在不同地点多次用到的相同的程序段.输入.输出和总线信号的数据可以传入.传出任务和函数. task 和 function 的不同: 1)函数只能与主模块共用同一个仿真的时间单位,而任务可以自己定义自己的仿真时间单位. 2)函数不能启动任务,但是可以调用其它函数,但是任务可以调用其他函数和任务: 3)函数至少要有一个输入变量,而任务可以没有或…
Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用parameter 关键字声明,那么在上层模块例化使用该功能模块时,可以根据具体需求重新配置该常量的值,从而实现不同应用场合对对应常量的灵活调整.   以下为使用Verilog设计的一个控制LED闪烁灯的模块代码:   01    module counter(Clk,Rst_n,led); 02…
verilog实现16位五级流水线的CPU带Hazard冲突处理 该文是基于博主之前一篇博客http://www.cnblogs.com/wsine/p/4292869.html所增加的Hazard处理,相同的内容就不重复写了,可点击链接查看之前的博客. CPU设计 该处理器的五级流水线设计: 类似于MIPS体系架构依据流水线结构设计.只要CPU从缓存中获取数据,那么执行每条MIPS指令就被分成五个流水阶段,并且每个阶段占用固定的时间,通常是只耗费一个处理器时钟周期. 处理器在设计时,将处理器的…
http://www.cnblogs.com/loves6036/p/5779691.html 数字芯片和FPGA的验证.主要是其中的功能仿真和时序仿真. 验证中通常要搭建一个完整的测试平台和写所需要测试用例.而verilog这种硬件描述语言是出于可综合成电路的目的设计出来的,所以它在书写测试平台和测试用例是不够方便的(测试平台和用例不需要综合成电路).而SV正是由于它不需要满足可综合性,所以它变得非常灵活,它引入了面向对象语言的概念.在验证方面,如果说verilog是C语言的话,那SV就是C+…
时至今日,终于将全部的计划55条MIPS指令在FPGA上全部验证完毕,通过这近一个月的不断的修改调试.修改调试,我对整个流程对MIPS有了深刻的体会和认识.借着刚刚现阶段任务的兴奋和短暂的空闲时间,将自己这段时间以来的心得体会记录下来,希望可以帮到感兴趣的同学.   首先我想说一下MIPS,最开始接触MIPS时,我还认为是百万指令集的缩写,百度了一下才知道是一家公司名,后来才知道这里所说的MIPS是一种体系结构.说实话,计组原学的不是很好,微机原理学的倒还行.但是对RISC的理解和认识也只是停留…
一个设计是由一个个模块(module)构成的.一个模块的设计如下: 1.模块内容是嵌在module 和endmodule两个语句之间.每个模块实现特定的功能,模块可进行层次的嵌套,因此可以将大型的数字电路设计分割成大小不一的小模块来实现特定的功能,最 后通过由顶层模块调用子模块来实现整体功能,这就是Top-Down的设计思想,如 3.3.1的例[3]. 2.模块包括接口描述部分和逻辑功能描述部分.这可以把模块与器件相类比. 模块的端口定义部分: 如上例: module addr (a, b, c…
*作者: Ian11122840    时间: 2010-9-27 09:04                                                                                                                                                                * *标题: 菜鸟做设计必看!有关如何做设计的整体思路,以及能否综合的笔记             …
随着数字电路技术的发展,数字锁相环在调制解调.频率合成.FM 立体声解码.彩色副载波同步.图象处理等各个方面得到了广泛的应用.数字锁相环不仅吸收了数字电路可靠性高.体积小.价格低等优点,还解决了模拟锁相环的直流零点漂移.器件饱和及易受电源和环境温度变化等缺点,此外还具有对离散样值的实时处理能力,已成为锁相技术发展的方向. 所谓数字PLL,就是指应用于数字系统的PLL,也就是说数字PLL中的各个模块都是以数字器件来实现的,是一个数字的电路. 数字锁相环的优点是电路最简单有效,可采用没有压控的晶振,…
在Verilog中有时候会误用的上引号 1,define 中的 `define INITIAL  0 这个单引号用的是键盘左上角的那个单引号,其实就是一个小撇. 2,4'd0 这个 用的是才是叫真正的单引号吧,我想.因为它的上键是双引号,右手小拇指旁边那个.…
菜鸟做的的小实验链接汇总:           1.基于Verilog HDL 的数字时钟设计 2.乘法器 3.触发器(基本的SR触发器.同步触发器.D触发器) 4.基于Verilog HDL的ADC0809CCN数据采样 5.基于Verilog HDL 的数字电压表设计 6.LCD12864 液晶显示-汉字及自定义显示(并口) 7.LCD12864 液晶显示-汉字及自定义显示(串口) 8.基于M9K块配置ROM的LCD12864图片显示实验 9.PS2键盘 + LCD12864 实验…
话不多说先上图         前言 自从学习FPGA以来,唯一做过的完整系统就是基于basys2得多功能数字表.记得当时做的时候也没少头疼,最后用时间磨出来了一个不是很完整的小系统,当时还是产生了满满的成就感.现在回头看来,先不说功能实现的如何,首先代码书写满是不规范,其中犯得最多的一个问题就是把verilog当C来写.所以,我决定趁着寒假自由支配的时间比较多,决定重写多功能数字时钟,算是对我大二第一学期以来对verilog的学习做一个总结. 首先,重写后的工程不仅在功能上做了一些优化,而且占…
本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇: 组合逻辑输出类型选择; 语法上的变量交换; ·易忘篇: case/casex/casez语句; 循环语句: 数制和操作符: 数据类型: ·易错: 技巧篇: 1.组合逻辑输出:描述一个纯组合逻辑电路时,尽量不要把输出定义成输出类型,例如描述下面的电路: )( :] a, // sel=00时,选择…
前面已经记录了一些组成Verilog的基本组成,可以用这些基本组成来构成表达式.这一节,就来记录一下把这些表达式构成一个文件的各种行为描述语句. ①这里用Verilog基本要素进行的行为描述主要是针对综合来的,也就是可以设计出实际电路来的(行为描述语句有两大子集,一个是面向综合,一个是面向仿真).②行为描述语句一般指放在always语句中.内容提纲如下所示: ·触发事件控制 ·条件语句(if与case语句) ·循环语句 ·任务和函数 ·编译预处理 一.触发事件控制 ①电平敏感事件是指 指定信号的…
消失了好久,没有写文章,也没有做笔记,因为最近再赶一个比赛,时间很紧,昨天周六终于结束了,所以趁着周末这会儿有时间,写点东西,记录下来.首先我学习FPGA才一年多,我知道自己没有资格谈论一些比较深层次的问题,对于这个行业来说可能我才是一直脚踩在门外面.所以这篇文章是写给一些刚开始学习FPGA.Verilog HDL的同学,我看过一些大神写的代码,然后尽量模仿大神写法,经过好几个大神的影响和自己的习惯摸索,最终算是总结出了一套自己的代码书写风格,当然我的代码风格还是一直在进化中.现在将自己的一些经…
大三上学期开展了数字系统设计的课程,下学期便要求自己写一个单周期CPU和一个多周期CPU,既然要学,就记录一下学习的过程. CPU--中央处理器,顾名思义,是计算机中最重要的一部分,功能就是周而复始地执行指令.其实开始做这部分之前,想到CPU就觉得很麻烦,毕竟时计算机内部最重要的东西,但其实刨开来细看,也就慢慢地接受了,当然我现在也不能说是了如指掌,说简单,毕竟自己还处于学习阶段,甚至可能还没有入门.慢慢来吧,先从简单的开始,一步一个脚印,总能写成的.今天先写在具体写代码之前的思路和设计方案.…