本篇博客主要实现对组合逻辑电路的一些常用模块的实现。组合逻辑中,包括译码器,编码器,输入输出选择器,数值比较器,算法单元等。

 先来实现编码器,最常用的8-3编码器,这里先讲一下要用到的case ,casex,casez三者的关系和区别。对于8-3编码器因为用到优先级编码,所以三者的区别。Casex中对于某些位呈现x或者z,对这些位比较就会忽略,不予考虑,而只关注其他位的比较结果。casez中对于某些位呈现高组态,对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。而case是一种全比较型,逐一进行比较。在应用过程中不建议采用casex或者casez的形式,因为有些综合其不能对两者进行综合,所以建议采用case语句。这里在modelsim中采用casex形式对编码器进行编码。

  这里讲解一下verilog书写代码的格式,首先调用预编译命令`timescale命令,指定仿真时间单位和仿真时间精度,不可省略。

  Module(

    Input clk,

    Input rst_n,

    nput xxx,(这里加入其它输入信号)

    output xx(这里加入其它输出信号)

);

    reg xxx;

  always@(posedge clk or negedge rst_n)

    begin

      if(rst_n)

        //这里加入要初始化的参数

      else if()

        //这里加入满足此条件的功能

      else()

    end

assign 输出信号 = 满足要求的输出变量值;

endmodule

上述是简单的verilog结构,verilog语法有很多种,其实常用的不多,记住常用的语法就可以了。比如如下:

localparam N = 20;

parameter N = 20;

上述两个参数的作用范围不一样,parameter定义的参数可以用于参数的传递,而localparam定义的的参数只能在module内使用。

task

begin

//加入要执行的语句

end

endtask

这里说一下task和function的区别,在面试的时候可能会被问到。

task的结构定义需要在过程块的外部,不能定义在内部。task的调用必须在过程块内调用。task的定义可以定义有输入输出端口,也可以不用定义,task可以调用function和其他类的函数。

function的结构定义也是不能定义在过程快的内部,而且function内部不能出现时延参数,#、@ 等。function只有input变量,不过可以通过参数名来传递一个返回值。

所以上述两者的区别就是:

task有输入输出端口,function只有输入端口,没有输出端口。

task的调用必须通过输出端口来传递输出值,function是通过函数名来传递一个返回值。

function中不能调用任务类函数,task可以调用function。

function可以出现在过程块或者连续赋值语句中,task只能出现在过程块中。

function只能与主模块共用一个仿真时间单位,其内部不能有其他时延参数参与,task中没有此限制。

repeat();该语句执行重复命令,括号内填写重复的数字即可,如repeat (4) @(posedge clk),该语句的意思是重复执行clk上升沿4次。

forever # (N/2) clk = !clk;

forever语句是永远执行的意思,常常用于时钟信号的产生。

initial

begin

//加入要执行的语句

end

代码实现部分可以参考 个人专博,网址:http://www.raymontec.com/

FPGA编程—组合逻辑编码器等verilog实现的更多相关文章

  1. 基于verilog的FPGA编程经验总结(XILINX ISE工具)

    1.用ISE仿真的时候.所用变量一定要初始化. ISE默认初始量为"XXXXX", 而Quarters是默认为"00000"的, 其实实际上, 下到FPGA里后 ...

  2. 基于FPGA的cordic算法的verilog初步实现

    最近在看cordic算法,由于还不会使用matlab,真是痛苦,一系列的笔算才大概明白了这个算法是怎么回事.于是尝试用verilog来实现.用verilog实现之前先参考软件的程序,于是先看了此博文h ...

  3. FPGA, Float 32bit, multiplyier by Verilog

    1, FPGA device, using three 18bit x 18 bit multiplier to implement 32bit float multiplier 2, compari ...

  4. FPGA编程技巧系列之按键边沿检测

    抖动的产生: 通常的按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开.因而在闭合及断开的瞬间均伴随有一连串的 ...

  5. 【FPGA】高斯白噪声的Verilog实现

    本文章主要讨论高斯白噪声的FPGA实现.简单的方法可以采用在Matlab中产生服从一定均值和方差的I.Q两路噪声信号.然后将两组数据存在FPGA中进行回放,以此来产生高斯白噪声.这种方法优点是产生方法 ...

  6. FPGA实战操作(1) -- SDRAM(Verilog实现)

    对SDRAM基本概念的介绍以及芯片手册说明,请参考上一篇文章SDRAM操作说明. 1. 说明 如图所示为状态机的简化图示,过程大概可以描述为:SDRAM(IS42S16320D)上电初始化完成后,进入 ...

  7. Xilinx FPGA编程技巧之常用时序约束详解

    1.   基本的约束方法 为了保证成功的设计,所有路径的时序要求必须能够让执行工具获取.最普遍的三种路径为: 输入路径(Input Path),使用输入约束 寄存器到寄存器路径(Register-to ...

  8. FPGA编程技巧系列之输入输出偏移约束详解

    1.   偏移约束的作用 偏移约束(Offset Constraint)用来定义一个外部时钟引脚(Pad)和数据输入输出引脚之间的时序关系,这种时序关系也被称为器件上的Pad-to-Setup或Clo ...

  9. FPGA编程基础(一)--參数传递与寄存器使用

    一.參数映射 參数映射的功能就是实现參数化元件.所谓的"參数化元件"就是指元件的某些參数是可调的,通过调整这些參数从而可实现一类结构类似而功能不同的电路.在应用中.非常多电路都可採 ...

随机推荐

  1. 洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)

    To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows con ...

  2. AppleScript脚本学习记录《一》

    tell命令块 tell application "Finder" display dialog "Hello World" end tell 声明变量 set ...

  3. ffmpeg for iOS

    链接: ios ffmpeg 实时视频压缩(主要是H264) 最简单的基于FFmpeg的移动端例子:IOS 视频转码器 iOS下使用FFMPEG的一些总结 iOS配置FFmpeg框架 iOS上使用高大 ...

  4. firedac数据集数据序列为JSON

    firedac数据集数据序列为JSON FIREDAC数据库引擎充分地考虑了跨平台和跨语言的支持. 因此,FIREDAC数据集可以序列为BIN\XML\JSON,三种格式. firedac数据集数据序 ...

  5. 转: chrome64打开弹出窗flash的办法

    https://jingyan.baidu.com/article/380abd0a38f0411d90192c2e.html

  6. CCNA实验3.单臂路由器

    拓扑图: 一.交换机配置 通过路由器子接口的方式实现vlan之间的路由. conf t vlan 10 vlan 20 int f0/1 switchport access vlan 10 int f ...

  7. RHEL下修改市区

    针对中国时区,修改操作如下 1.   修改文件 /etc/sysconfig/clock内容: ZONE=Asia/ShanghaiUTC=falseARC=false 2.     rm /etc/ ...

  8. Wifiner for Mac(WiFi 状况分析工具)破解版安装

    1.软件简介    Wifiner 是 macOS 系统上一款 Wifi 分析工具,仅需几次点击即可对您的 Wi-Fi 网络连接进行分析和故障排除.扫描您的 Wi-Fi 网络,获取包含交互式彩色编码热 ...

  9. Charles for Mac(HTTP 监视器和网络抓包工具)破解版安装

    1.软件简介    Charles 是在 Mac.Linux 或 Windows 下常用的 http 协议网络包截取工具,在平常的测试与调式过程中,掌握此工具就基本可以不用其他抓包工具了.Charle ...

  10. JEECG中表单提交的中断

    JEECG平台中基于form表单封装了<t:formvalid>标签,对应实现的类为FormValidationTag.java文件. 很多时候在正式向后台提交数据前想要做判断处理,若通过 ...