• FPGA编程—组合逻辑编码器等verilog实现


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

       FPGA编程—组合逻辑编码器等verilog实现 先来实现编码器,最常用的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/

  • 相关阅读:
    UISearchBar clearButton
    github上不了改下host
    github命令
    quick-lua调试
    UIButton Making the hit area larger
    linux中crontab实现以秒执行任务
    学习linux必备服务器VPS
    JAVA线程全局异常处理
    spring基础
    <s:select>自动加标签
  • 原文地址:https://www.cnblogs.com/raymon-tec/p/5828034.html
走看看 - 开发者的网上家园