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

 先来实现编码器,最常用的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. 利用java编写的盲注脚本

    之前在网上见到一个盲注的题目,正好闲来无事,便用java写了个盲注脚本,并记录下过程中的坑 题目源码: <?php header("Content-Type: text/html;ch ...

  2. [NOIp2009普及组]细胞分裂

    思路: 首先将$30000$以内的所有质数求出,再对$m1$质因数分解. 对于每个$s$,计算它和$m1$的每个公共质因数的倍数关系,取$max$则为该细胞满足条件所花费的最少时间. 再对于每个细胞的 ...

  3. MySQL数据命令

    一.数据库操作 创建数据库 create database db1 charset utf8; 查看数据库 show database; show create database db1; selec ...

  4. saltstack 命令2

    在Salt主机上,可以快速查看所有Salt minion连接,并查看连接是否被接受,拒绝或挂起 [root@node1 ~]# salt-key -L 接受所有的key [root@node1 ~]# ...

  5. Java基础-多线程-①线程的创建和启动

    简单阐释进程和线程 对于进程最直观的感受应该就是“windows任务管理器”中的进程管理: (计算机原理课上的记忆已经快要模糊了,简单理解一下):一个进程就是一个“执行中的程序”,是程序在计算机上的一 ...

  6. 转载: ASP.NET Core入门系列文章

    今天在网上发现了ithome上的asp.net core 系列文章,对于新手入门还不错,这里转载一下,也方便查阅. [Day01] 從頭開始 [Day02] 程式生命週期 (Application L ...

  7. HDU4772(杭州赛区)

    Zhuge Liang's Password Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  8. 【Yaml】Yaml学习笔记

    转载:https://blog.csdn.net/moshenglv/article/details/52084899 YAML何许物也?在XML泛滥的情况下,YAML的出现的确让人眼前一亮,在初步学 ...

  9. getting-started-with-mqtt

    来自:https://dzone.com/refcardz/getting-started-with-mqtt SECTION 1 Why MQTT? The Internet of Things ( ...

  10. PL/SQL学习笔记之条件控制语句

    一:IF-THEN语句 IF (condition) THEN commands; END IF; 二:IF-THEN_ELSE语句 IF (condition) THEN S1; ELSE S2; ...