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

来源:本站
导读:目前正在解读《FPGA编程—组合逻辑编码器等verilog实现》的相关信息,《FPGA编程—组合逻辑编码器等verilog实现》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《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

提醒:《FPGA编程—组合逻辑编码器等verilog实现》最后刷新时间 2024-03-14 00:54:06,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《FPGA编程—组合逻辑编码器等verilog实现》该内容的真实性请自行鉴别。