一、參数映射

參数映射的功能就是实现參数化元件。所谓的”參数化元件“就是指元件的某些參数是可调的,通过调整这些參数从而可实现一类结构类似而功能不同的电路。在应用中。非常多电路都可採用參数映射来达到统一设计。如计数器、分频器、不同位宽的加法器以及不同刷新频率的VGA视频接口驱动电路等。

參数传递

參数传递就是在编译时对參数又一次赋值而改变其值。

传递的參数是子模块中定义的parameter,其传递方法有以下两种。

  • 时钟”#“符号
在同一模块中使用”#“符号。參数赋值的顺序必须与原始模块中进行參数定义的顺序同样,并非一定要给全部的參数都赋予新值,但不同意跳过不论什么一个參数。即使是保持不变的值也要写在对应的位置。
module #(parameter1, parameter2) inst_name(port_map);
module_name #(.parameter_name(para_value), .parameter_name(para_value)) inst_name(port_map);
例:通过”#“字符实现一个模值可调的加1计数器
module cnt(
input clk,
input rst,
output reg[15:0] cnt_o
);
//定义參数化变量
parameter[15:0] Cmax = 1024; always @(posedge clk or negedge rst) begin
if(!rst)
cnt_o <= 0;
else
if(cnt_o == Cmax)
cnt_o <= 0;
else
cnt_o <= cnt_o + 1;
end endmodule
module param_counter(
input clk,
input rst,
output [15:0] cnt_o
); //參数化调用。利用#符号将计数器的模值10传入被调用模块
cnt #10 inst_cnt(
.clk(clk),
.rst(rst),
.cnt_o(cnt_o)
);
endmodule




  • 使用defparamkeyword
defparamkeyword能够在上层模块去直接改动下层模块的參数值。从而实现參数化调用。其语法格式例如以下:
defparam heirarchy_path.paramer_name = value;
这样的方法与例化分开,參数须要写绝对路径来指定。

參数传递时各个參数值的排列次序必须与被调用模块中各个參数的次序保持一致。而且參数值和參数个数也必须同样。

假设仅仅希望对被调用模块内的个别參数进行更改,所有不须要更改的參数值也必须按相应參数的顺序在參数值列表中所有列出(原值拷贝)。
使用defparam语句进行又一次赋值时必须參照原參数的名字生成成分级參数名。
例:通过”defparam“实现一个模值可调的加1计数器。
module param_counter(
input clk,
input rst,
output [15:0] cnt_o
); //參数化调用,利用#符号将计数器的模值10传入被调用模块
cnt inst_cnt(
.clk(clk),
.rst(rst),
.cnt_o(cnt_o)
);
//同过defparam改动參数
defparam inst_cnt.Cmax = 12;
endmodule

二、寄存器类型

寄存器变量,都有“寄存性”,即在接手下一次赋值前。将保持原值不变。寄存器型变量没有强度之分,且全部寄存器类变量都必须明白给出类型说明(无缺省状态)。寄存器数据类型这里仅介绍两种经常使用类型。

  • reg:经常使用的寄存器型变量。用于行为描写叙述中对寄存器类的说明,由过程赋值语句赋值;
  • Integer: 32位带符号整型变量
1、reg寄存器类型
寄存器数据类型reg是最常见的数据类型。寄存器能够取随意长度。reg型数据的缺省值是未知的,reg型数据能够为正值或负值。

但当一个reg型数据是一个表达式中的操作数时,它的值被当无符号值,即正值。

假设一个4位的reg型数据被写入-1,在表达式中运算时,其值被觉得是+15。比如:

reg [3:0] Comb;
Comb = -2; //Comb的值为14(1110),1110是-2的补码

2、integer寄存器类型
整数寄存器包括整数值。

整数寄存器能够作为普通寄存器使用。使用整数型说明形式例如以下:

integer integer1, integer2,......integerN[msb:lsb];
integer Hist[3:6]; //一组四个寄存器
一个整数型寄存器可存储有符号数。而且算术操作符提供2的补码运算结果。整数不能作为向量訪问。比如,对于上面的整数B的说明,B[6]和B[20:10]是非法的。一种截取位值的方法是将整数赋值给一般的reg类型变量,然后从中选取对应的位。例如以下:
reg [31:0] Breg;
integer Bint;
Breg = Bint;
上例说明了假设通过简单的赋值将整数装换为位向量。类型转型自己主动完毕。不必使用特定的函数。

从位向量到整数的转换也能够通过赋值完毕。比如:

integer J;
reg [3:0] Bcq;
J = 6; //J的值为32‘b0000...00110
Bcq = J; //Bcq的值为4'b0110
Bcq = 4'd0101;
J = Bcq; //J的值为32’b0000...00101
J = -6; // J的值为32‘b1111...11010
Bcq = J ; //Bcq的值为4'b1010






















































FPGA编程基础(一)--參数传递与寄存器使用的更多相关文章

  1. ionic新手教程第七课-简要说明几种界面之间的參数传递及优缺点

    截至2016年4月13日19点32分,我公布的ionic新手教程,已经公布6课了, 总訪问量将近6000,平均每节课能有1000的訪问量.当中訪客最多的是第三课有2700的訪客. watermark/ ...

  2. java參数传递机制浅析

    欢迎转载,转载请声明出处! ----------------------------------------- 前言: java语言中,參数的传递仅仅有一种机制.那就是值传递. 举例: 以下将通过几个 ...

  3. c++參数传递

    定义: 形參:指出如今Sub 和Function过程形參表中的变量名.数组名,该过程在被调用前.没有为它们分配内存.其作用是说明自变量的类型和形态以及在过程中的作用.形參能够是除定长字符串变量之外的合 ...

  4. activity之间參数传递&amp;&amp;获取activity返回值&amp;&amp;activity生命周期

    Activity之间參数传递 A activity想将參数传给B activity时能够利用Intent将消息带过去 Intent intent = new Intent(this,BActivity ...

  5. 再次学习javascript中的參数传递

     javascript中的全部函数的參数传递都是依照值传递的,做了以下測试:    function addTen(num){ num +=10; return num; } var count = ...

  6. Fragment进阶(四)-----&gt;參数传递3种写法

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  7. 关于mybatis中,批量增删改查以及參数传递的问题

    1.參数传递的问题 大多数情况下,我们都是利用map作为參数,而且大部分情况下都是仅仅有一个參数. 可是,我们也能够利用@param注解,来传入多个參数,此时,mybatis会自己主动将參数封装成ma ...

  8. int 0x13中断的參数传递

    int 0x13中断向量所指向的中断服务程序实质上就是磁盘服务程序. 用途:将指定扇区的代码载入到内存的指定位置. 因此,在使用int 0x13中断时要将參数传递给服务程序: 比如:将指定扇区和载入的 ...

  9. C# 多线程參数传递

    1.通过实体类来传递(能够传递多个參数与获取返回值),demo例如以下: 须要在线程中调用的函数: namespace ThreadParameterDemo { public class Funct ...

随机推荐

  1. 一个JS效果竟然要研究一天,我是不是不适合做前端?

    前言 今天这篇文章的标题,显然是要搞事情.一个JS交互效果,居然花费了一天的宝贵时间才研究出来,我是不是不太适合做前端? 别急,搬好小板凳,正文从这开始- 本来今天下班回来感觉有点累,想着今天就别学了 ...

  2. 设备类型检测大全---userAgent

    对各种类型的设备的检测,以及所使用的浏览器的类型 function detect(ua) { var os = this.os = {}; var browser = this.browser = { ...

  3. seajs源码

    /*** Sea.js 3.0.0 | seajs.org/LICENSE.md 中文注释由 李祥威 添加,为个人对细节的理解,官方解释很详细的地方就不说了 难免有错漏,联系我: chuangweil ...

  4. js数组遍历some,foreach,map,filter,every对比

    1.  [...].some(ck)函数       ----      某个一个为true,则为true 对数组中每个元素执行一次ck函数,知道某个元素返回true,则直接返回true.如果都返回f ...

  5. HTML5 文件上传

    这篇随笔主要引用https://juejin.im/post/59598ecf5188250d8d141fff,只用于自己学习,不对外宣传. FileList 对象和 file 对象 input[ty ...

  6. 在WebForm中实现购物车思路

    关于网站购物车的实现的思考   写在前面的话:刚来公司的的时候,老大安排了一个任务,企业站,但是需要实现购物车的功能,以前没做过,所有就向周围的人请教了一下如何实现购物车,自己也在网上搜了一下,有了些 ...

  7. 获取所有栈的信息,只有最上面的和最下面的,但是不能获取栈中间的activity信息

    直接在cmd窗口上输入 adb shell后,再输入dumpsys activity activities,可以看到所有的activity以及相关栈状态

  8. Openstack的打包方法

    使用setup.cfg和setup.py进行管理 1.setup.py文件内容 # THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO ...

  9. PHP Xdebug安装及配置

    1.首先在官方网站下载dll文件; Xdebug官方网站 2.将php_xdebug.dll文件放入php/ext文件夹下; 3.编辑php.ini,在文件最后加入如下代码: ; Xdebug zen ...

  10. Java 8的新特性—终极版

    作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...