位宽

Verilog学习笔记

亡梦爱人 提交于 2019-11-28 02:34:47
http://hi.baidu.com/hieda/blog/item/ddcc9350b74940581038c2d0.html 一般认为 Verilog HDL在系统级抽象方面比VHDL略差一些,而在门级开关电路描述方面比VHDL要强的多 写了第一个verilog程序,是一个加法器内容如下 module adder(count,sum,a,b,cin); input[2:0] a,b; input cin; output count; output [2:0] sum; assign{count,sum}=a+b+cin; endmodule 开始编译出现了几次错误,后来发现给实体的命名和程序中实体要一致而且大小写要一样,整个程序是嵌套再module和endmodule当中的 而其中的注释和C/C++类似,用//和/*…*/来标明 module compare(equal,a,b); output equal; input [1:0] a,b; assign equal=(a==b)?1:0;//和C语言中的相同 endmodule verilog的基本设计单元是“模块(BLOCK)”。一个模块由两个部分组成,一部分描述端口,一部分描述逻辑功能,即定义输入是如何影响输出的。如下 module block(a,b,c,d); input a,b; output c,d;

FFT IP核调用与仿真之中篇_SCALE压缩因子设置

最后都变了- 提交于 2019-11-28 00:09:19
关于FFT IP核的配置,网上有很多相关的资料可以参考,但是唯独涉及到scaled压缩因子设置这个参数,资料却非常匮乏,这是个什么参数,应该整么设置,设置后对结果输出会有什么影响,整样才能知道它设置的合理不合理? 先来看一下官方说明手册里关于scaled的说明: 翻译过来就是: 对于 Pipelined Streaming I/O结构,将临近的一对基2阶组在一起,即阶0和阶1为组0,阶2和阶3为组1,阶4和阶5为组2等等。例如数据长度N=1024, Scale_SCH = [10 10 00 01 11]表示对组0(阶0和阶1)右移位3,对组1(阶2和阶3)右移位1,对组2(阶4和5)没有移位,对组3(阶6和7)右移位2, 对组 4(阶8和9)右移位2。但是要注意, 如果变换长度 N不是4的幂次方时,最后一组只包含一个基2阶,只能用00或者01表示, 例如数据长度 N=512时, Scale_SCH = [ 10 10 10 10 10]的设置则是无效的,而Scale_SCH = [01 10 10 10 11]的设置就是有效的。对于Scale_SCH的位宽,针对Pipelined Streaming I/O结构和Radix-4,Burst I/O结构,位宽为 2*ceil(0.5*log2(N)), 对于 Radix-2,Burst I/O和Radix-2 Lite,Burst

【转载】VIM自定义模板调用和VCS基本操作——数字IC设计小技能

天大地大妈咪最大 提交于 2019-11-26 14:15:57
一、前言    毕业论文答辩结束,闲下来写篇文章。芯片研发人员都在Linux系统下借助各种EDA工具和代码语言完成工作,因此提高代码开发效率,熟练运用开发工具是十分必要的。本文讲述VIM编辑神器的verilogHDL自定义模板调用以及VCS仿真软件的基本使用方式。 二、VIM编辑器自定义模板调用   在之前的博文中谈到过GVIM编辑器中可以通过调用模板来生成重复性代码,但没有介绍自定义模板的方式。关于VIM的安装与配置详细内容,见参考文献1。这里主要用到VIM的用户配置文件:.vimrc(若没有新建该文件并编辑),我们在用户目录下使用ls -al命令可以看到该文件:    使用VIM编辑器打开VIM配置文件,以下部分是在文件底部自行添加的命令:    自定义模板的格式为 :ab <com> <code>   其中com是调用指令,code是当前指令生成的代码。我们新建一个.v文件测试下就能看出模板调用的妙处了。 编辑(插入)模式下,输入Shixu后按下回车生成: 输入Zuhe后按下回车生成: 输入Counter后按下回车生成:    这三个是最常用到的代码,三者相互组合可以完成很多功能了。但若状态或工作模式较多,一般采用状态机完成。输入FSM后按下回车生成:    在设计时,经常要根据数值范围设定变量的位宽。此时经常用到一个位宽计算到函数。输入Width_func后按下回车生成: