Verilog如何使用除法?

作者&投稿:戎枯 (若有异议请与网页底部的电邮联系)
verilog的 “/”(除号)怎么用?~

verilog中基本不存在直接用“/”做除法,除法的运算时间长,基本上一个周期可能都算不完,一般采用近似方法代替:1、除以2的n次方时,可以采用丢位的方法,比如a除以2,可以写成a[3:1].2、一般的除法,比如你上面的a/b,都会转成乘法来做,如a*(1/b),其中1/b的分子可以放大1024倍后再做计算。

verilog中基本不存在直接用“/”做除法,除法的运算时间长,基本上一个周期可能都算不完,
一般采用近似方法代替:
1、除以2的n次方时,可以采用丢位的方法,比如a除以2,可以写成a[3:1].
2、一般的除法,比如你上面的a/b,都会转成乘法来做,如a*(1/b),其中1/b的分子可以放大1024倍后再做计算。
上面是我经常用的方法,希望能帮到你。

  应当调出使用ISE中的除法器的ip核,直接写除号不能综合,
  在HDL中直接写乘除号都不能综合出电路的,那是留给访真用的语法。
  Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。

1. 除数只能用2的整次幂,这个很奇怪,除法运算符"/"verilog是支持的
不知道你的除法是怎么做的

2. 还不行,换减法来做。
比如你的四位(千百十个)分别是A, B, C, D,都initial到 0
if input >= 1000
tmp = input -1000;
A = A+1;
if tmp >= 1000
tmp = tmp -1000;
A = A+1;
如果小于1000,就去减100。
这样写,代码量大,但是一定可以编译。
反正你的输入不会大过9999,代码多也不会太多。
用for循环会减少代码量,但可能编译有问题,如果你的ISE版本太老的话

小白,应该调用ISE中的除法器的ip核,直接写除号不能综合.
在HDL中直接写乘除号都不能综合出电路的,那是留给访真用的语法

七段数码管直接译码就行

1、实现算法
基于减法的除法器的算法:
对于32的无符号除法,被除数a除以除数b,他们的商和余数一定不会超过32位。首先将a转换成高32位为0,低32位为a的temp_a。把b转换成高32位为b,低32位为0的temp_b。在每个周期开始时,先将temp_a左移一位,末尾补0,然后与b比较,是否大于b,是则temp_a减去temp_b将且加上1,否则继续往下执行。上面的移位、比较和减法(视具体情况而定)要执行32次,执行结束后temp_a的高32位即为余数,低32位即为商。

2、 verilog HDL代码

[html] view plaincopyprint?
/*
* module:div_rill
* file name:div_rill.v
* syn:yes
* author:network
* modify:rill
* date:2012-09-07
*/

module div_rill
(
input[31:0] a,
input[31:0] b,

output reg [31:0] yshang,
output reg [31:0] yyushu
);

reg[31:0] tempa;
reg[31:0] tempb;
reg[63:0] temp_a;
reg[63:0] temp_b;

integer i;

always @(a or b)
begin
tempa <= a;
tempb <= b;
end

always @(tempa or tempb)
begin
temp_a = {32'h00000000,tempa};
temp_b = {tempb,32'h00000000};
for(i = 0;i < 32;i = i + 1)
begin
temp_a = {temp_a[62:0],1'b0};
if(temp_a[63:32] >= tempb)
temp_a = temp_a - temp_b + 1'b1;
else
temp_a = temp_a;
end

yshang <= temp_a[31:0];
yyushu <= temp_a[63:32];
end

endmodule

/*************** EOF ******************/

3、 testbench代码

[html] view plaincopyprint?
/*
* module:div_rill_tb
* file name:div_rill_tb.v
* syn:no
* author:rill
* date:2012-09-07
*/

`timescale 1ns/1ns

module div_rill_tb;

reg [31:0] a;
reg [31:0] b;
wire [31:0] yshang;
wire [31:0] yyushu;

initial
begin
#10 a = $random()%10000;
b = $random()%1000;

#100 a = $random()%1000;
b = $random()%100;

#100 a = $random()%100;
b = $random()%10;

#1000 $stop;
end

div_rill DIV_RILL
(
.a (a),
.b (b),

.yshang (yshang),
.yyushu (yyushu)
);

endmodule
/******** EOF ******************/


erilog敏感信号是什么意思
简单的说。。就是这个信号的变化,控制你程序是否进行。。这是我的理解。。

用Ⅴerilog HDL编写一个代码检测器,当输入序列为连续的10个“10”时...
用Ⅴerilog HDL编写一个代码检测器,当输入序列为连续的10个“10”时,输出为1,求

ISE调用modelsim仿真
1.运行modelsim-win64-10.1c-se.exe,可设置安装路径D:\\modeltech64_10.1c2.安装过程中会让选择是否“Install Hardware Security Key Driver”,选择yes,最后按要求reboot(貌似不重启也可以 )3.开始crack.把MentorKG.exe拷贝到:D:\\modeltech64_10.1c\\win644.使用命令提示符来执行,win+r运行...

常用文件扩展名有哪些
ERI ERWin文件 ERR 当RobooHELP帮助编译器企图编译一个帮助系统源文件时用来存储错误消息的文件 EPX ERWin文件 ESPS ESPS音频文件 EUI Ensoniq ESP家族的压缩磁盘映像 EVY 特使文档 EWL Microsoft Encarta文档 EXC Microsoft Word禁止字字典 EXE 可执行文件(程序) F FORTRAN文件 F2R Farandoyle线性模块格式 F3R Farand...

文件有很多种后缀名,哪位能给我讲讲那些后缀名各代表什么文件?~_百度知...
log 日志文件,通常用来记录一些事件之类 lzh 一种古老的压缩文件,可以使用WinRAR打开 mac Macintosh中使用的一中灰度图形文件格式,在Macintosh Paintbrush中使用,其分辨率只能是720*567 mag 图形文件格式 mdb Microsoft Access使用的数据库格式,是非常流行的桌面数据库 men 内存应用文件,存在于Dbase,Foxbase,Foxpro系列软件...

我想知道所有文件后缀?
ERI ERWin文件 ERR 当RobooHELP帮助编译器企图编译一个帮助系统源文件时用来存储错误消息的文件 EPX ERWin文件 ESPS ESPS音频文件 EUI Ensoniq ESP家族的压缩磁盘映像 EVY 特使文档 EWL Microsoft Encarta文档 EXC Microsoft Word禁止字字典 EXE 可执行文件(程序) F FORTRAN文件 F2R Farandoyle线性模块格式 F3R Faran...

EXE文件就是什么?
ERI ERWin文件 ERR 当RobooHELP帮助编译器企图编译一个帮助系统源文件时用来存储错误消息的文件 EPX ERWin文件 ESPS ESPS音频文件 EUI Ensoniq ESP家族的压缩磁盘映像 EVY 特使文档 EWL Microsoft Encarta文档 EXC Microsoft Word禁止字字典 EXE 可执行文件(程序) F FORTRAN文件 F2R Farandoyle线性模块格式 F3R Faran...

电脑格式
log 日志文件,通常用来记录一些事件之类 lzh 一种古老的压缩文件,可以使用WinRAR打开 mac Macintosh中使用的一中灰度图形文件格式,在Macintosh Paintbrush中使用,其分辨率只能是720*567 mag 图形文件格式 mdb Microsoft Access使用的数据库格式,是非常流行的桌面数据库 men 内存应用文件,存在于Dbase,Foxbase,Foxpro系列软件...

████什么是后缀名?各有哪几种?████
LOG [非法语句]志文件 LPD Helix Nut和Bolt文件 LRC Intel可视电话文件 LSL Corel Paradox保存的库文件 LSP AutoLISP、CommonLISP和其他LISP语言文件 LST 列表文件 LU ThoughtWing库单元文件 LVL Parallax Software的 Miner Descent\/D2 Level扩展LWLO Lightwave分层对象文件 LWOB Lightwave对象文件 LWP Lotus WordPro ...

文件格式
ERI ERWin文件 ERR 当RobooHELP帮助编译器企图编译一个帮助系统源文件时用来存储错误消息的文件 EPX ERWin文件 ESPS ESPS音频文件 EUI Ensoniq ESP家族的压缩磁盘映像 EVY 特使文档 EWL Microsoft Encarta文档 EXC Microsoft Word禁止字字典 EXE 可执行文件(程序) F FORTRAN文 F2R Farandoyle线性模块格式 F3R Faran...

镇平县17544077280: verilog的 "/"(除号)怎么用? -
策璧泰美: verilog中基本不存在直接用“/”做除法,除法的运算时间长,基本上一个周期可能都算不完,一般采用近似方法代替:1、除以2的n次方时,可以采用丢位的方法,比如a除以2,可以写成a[3:1].2、一般的除法,比如你上面的a/b,都会转成乘法来做,如a*(1/b),其中1/b的分子可以放大1024倍后再做计算.

镇平县17544077280: Verilog如何使用除法? -
策璧泰美: 小白,应该调用ISE中的除法器的ip核,直接写除号不能综合.在HDL中直接写乘除号都不能综合出电路的,那是留给访真用的语法

镇平县17544077280: verilog除法怎么实现? -
策璧泰美: http://wenku.baidu.com/view/2f26f6323968011ca300911d.html这个地址是一个快速二进制的除法算法.你利用verilog来编写就好了.

镇平县17544077280: 在Verilog里可以直接用'/'来做除法吗 -
策璧泰美: // 输入数据头指针, 数据长度 // 返回crc8校验码 uint8_t crc8(uint8_t *data, uint_len length) { uint8_t i; uint8_t crc = 0; // initial value while(length--) { crc ^= *data++; // crc ^= *data; data++; for ( i = 0; i < 8; i++ ) { if ( crc & 0x80 ) crc = (crc << 1) ^ 0x07; ...

镇平县17544077280: verilog怎么做小数除法? -
策璧泰美: 只能求近似值,先把小数的13位变成整数,即乘2^13,这时候的16位整数做了一次近似取整,最后在乘2^13就可以了,在除法器中只要让N=1024*2^13 ,W=16位的值就可以了

镇平县17544077280: quartus里面用verilog语言如何调用除法器 -
策璧泰美: tools-MegaWizard Plugin Manager-Next-Arithmetic-LPM_DIVIDE设置好以后,生成,会有几个文件产生,打开*.v或者*.vhd,里面就有除法器的定义,在主文件中调用即可.

镇平县17544077280: FPGA verilog quartusII 除法运算我不是问如何实现除法,而是怎么用除法.我可以直接使用/这个符号吗?比如说c=a/128这样的c的结果是?a是一个8为正整... -
策璧泰美:[答案] 不能直接用除号,不可综合;乘法可以直接使用,但注意不要越界

镇平县17544077280: verilog 怎么实现 可综合的 除法? -
策璧泰美: quartusii里面有除法器 大概叫lpm_divide 我没用过 但是猜想一定很费资源 如果你的意思是除以1到1000中的任意一个整数 不妨就采用case的方式 除1的时候就得25 000 000 除2的时候就得12 500 000 依此类推 fpga是以查找表结构实现的 我觉得这么做最节约资源 而且肯定可以在一个时钟周期内完成

镇平县17544077280: verilog 实现1除以X -
策璧泰美: x有位宽吧,最简单的方法,用查找表(LUT,look-up table).先把1/x的值计算出来存在表格中,然后输入X作为地址,给出X,就知道了X值所在位置的地址,然后输出该值就可以了.一般FPGA都有BLOCK RAM, 地址线10,11位的样子,18bit位宽,一般的计算足够了.如果不能用LUT,找找相应的算法就行了.我记得有本书叫数字信号处理算法的FPGA实现,上面好像有介绍除法的实现

镇平县17544077280: 如何用Verilog Hdl实现算术运算 -
策璧泰美: verilog只是在做除法的时候会有问题,及时不能做小数运算,除法通过移位得到.其他的加减乘都可以.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网