基础004_V7-DSP Slice

主要参考ug479.pdf。之前的文章:FIR调用DSP48E_05。本文主要记录基本用法。

一、DSP48核

  A-参数说明

  •  instrctions,多个功能,通过sel选用

目前没发现C勾选与否,有何影响。

如上图所示,结果3拍后输出:

其他参数:

  B-IP调用

 生成IP核,参数设置完毕直接调用即可

dsp48_ex dsp_inst(
.CLK(clk),
.A(a),
.B(b),
.C(c),
.P(p)
);

  

二、原语示例

主要参考pg148-dsp48 macro.pdf用到再细化补充。

  Ex1

// m = b * (a + d)
// p = c+m or p+m

`timescale 1ns / 1ps// m = b * (a + d)
// p = c+m or p+m
module dsp48_wrap_f(input          clock,input          ce1,input          ce2,input          cem,input          cep,input signed [24:0]    a,input signed [17:0]    b,input signed [47:0]    c,input signed [24:0]    d, // this has two fewer pipe stages// X+Y is usually the multiplier output (M)// Z is either P, PCIN or C// bit 1:0: 0: Z+X+Y 3:Z-(X+Y) 1: -Z + (X+Y) 2: -1*(Z+X+Y+1)// bits 3:2, 0: Z=0, 1: Z=PCIN, 2: Z=P, 3: Z = C// bit 4: sub in pre addinput [4:0]        mode,input signed [47:0]    pcin,output signed [47:0]   pcout,output signed [47-S:0] p);parameter S = 0;parameter USE_DPORT = "FALSE"; // enabling adds 1 reg to A pathparameter AREG = 1;parameter BREG = 1; // 0 - 2wire signed [47:0]      dsp_p;assign p = dsp_p[47:S];DSP48E1#(.A_INPUT("DIRECT"),   // "DIRECT" "CASCADE".B_INPUT("DIRECT"),   // "DIRECT" "CASCADE".USE_DPORT(USE_DPORT),.USE_MULT("MULTIPLY"),// "MULTIPLY" "DYNAMIC" "NONE".USE_SIMD("ONE48"),   // "ONE48" "TWO24" "FOUR12"// pattern detector - not used.AUTORESET_PATDET("NO_RESET"), .MASK(48'h3fffffffffff),.PATTERN(48'h000000000000), .SEL_MASK("MASK"),.SEL_PATTERN("PATTERN"), .USE_PATTERN_DETECT("NO_PATDET"),// register enables.ACASCREG(1),   // pipeline stages between A/ACIN and ACOUT (0, 1 or 2).ADREG(1),      // pipeline stages for pre-adder (0 or 1).ALUMODEREG(1), // pipeline stages for ALUMODE (0 or 1).AREG(AREG),       // pipeline stages for A (0, 1 or 2).BCASCREG(1),   // pipeline stages between B/BCIN and BCOUT (0, 1 or 2).BREG(BREG),    // pipeline stages for B (0, 1 or 2).CARRYINREG(1), // this and below are 0 or 1.CARRYINSELREG(1),.CREG(1),.DREG(1),.INMODEREG(1),.MREG(1),.OPMODEREG(1),.PREG(1))dsp48_i(// status.OVERFLOW(),.PATTERNDETECT(), .PATTERNBDETECT(),.UNDERFLOW(),// outs.CARRYOUT(),.P(dsp_p),// control.ALUMODE({2'd0, mode[1:0]}),.CARRYINSEL(3'd0),.CLK(clock),.INMODE({1'b0,mode[4],3'b100}),.OPMODE({1'b0,mode[3:2],4'b0101}),// signal inputs.A({5'd0,a}), // 30.B(b), // 18.C(c), // 48.CARRYIN(1'b0),.D(d), // 25// cascade ports.ACOUT(),.BCOUT(),.CARRYCASCOUT(),.MULTSIGNOUT(),.PCOUT(pcout),.ACIN(30'h0),.BCIN(18'h0),.CARRYCASCIN(1'b0),.MULTSIGNIN(1'b0),.PCIN(pcin),// clock enables.CEA1(ce1), .CEA2(ce2),.CEAD(1'b1),.CEALUMODE(1'b1),.CEB1(ce1), .CEB2(ce2),.CEC(1'b1),.CECARRYIN(1'b1),.CECTRL(1'b1), // opmode.CED(1'b1),.CEINMODE(1'b1),.CEM(cem), .CEP(cep),.RSTA(1'b0),.RSTALLCARRYIN(1'b0),.RSTALUMODE(1'b0),.RSTB(1'b0),.RSTC(1'b0),.RSTCTRL(1'b0),.RSTD(1'b0),.RSTINMODE(1'b0),.RSTM(1'b0),.RSTP(1'b0));endmodule // dsp48_wrap_f

  Ex2

/ /p = c + b * a 3 cycles if r else p = p + b * a

// p = c + b * a 3 cycles if r else p = p + b * a
module macc(input          clock,input [2:0]    ce, // bit 0 = a, 1 = b , 2 = cinput          r, // reset accumulator to c + a*binput signed [24:0]    a,input signed [17:0]    b,input signed [47:0]    c,output signed [47-S:0] p;parameter S = 0;parameter AREG = 1; // 0 - 2parameter BREG = 1; // 0 - 2wire signed [47:0]      dsp_p;assign p = dsp_p[47:S];// X+Y is usually the multiplier output (M)// Z is either P, PCIN or C// bit 1:0: 0: Z+X+Y 3:Z-(X+Y) 1: -Z + (X+Y) 2: -1*(Z+X+Y+1)// bits 3:2, 0: Z=0, 1: Z=PCIN, 2: Z=P, 3: Z = C// bit 4: sub in pre addwire [4:0]  mode = {1'b0, r ? 2'b11 : 2'b10, 2'b00};DSP48E1#(.A_INPUT("DIRECT"),   // "DIRECT" "CASCADE".B_INPUT("DIRECT"),   // "DIRECT" "CASCADE".USE_DPORT("FALSE"),.USE_MULT("MULTIPLY"),// "MULTIPLY" "DYNAMIC" "NONE".USE_SIMD("ONE48"),   // "ONE48" "TWO24" "FOUR12"// pattern detector - not used.AUTORESET_PATDET("NO_RESET"), .MASK(48'h3fffffffffff),.PATTERN(48'h000000000000), .SEL_MASK("MASK"),.SEL_PATTERN("PATTERN"), .USE_PATTERN_DETECT("NO_PATDET"),// register enables.ACASCREG(1),   // pipeline stages between A/ACIN and ACOUT (0, 1 or 2).ADREG(1),      // pipeline stages for pre-adder (0 or 1).ALUMODEREG(1), // pipeline stages for ALUMODE (0 or 1).AREG(AREG),       // pipeline stages for A (0, 1 or 2).BCASCREG(1),   // pipeline stages between B/BCIN and BCOUT (0, 1 or 2).BREG(BREG),    // pipeline stages for B (0, 1 or 2).CARRYINREG(1), // this and below are 0 or 1.CARRYINSELREG(1),.CREG(1),.DREG(1),.INMODEREG(1),.MREG(1),.OPMODEREG(1),.PREG(1))dsp48_i(// status.OVERFLOW(),.PATTERNDETECT(), .PATTERNBDETECT(),.UNDERFLOW(),// outs.CARRYOUT(),.P(dsp_p),// control.ALUMODE({2'd0, mode[1:0]}),.CARRYINSEL(3'd0),.CLK(clock),.INMODE({1'b0,mode[4],3'b100}),.OPMODE({1'b0,mode[3:2],4'b0101}),// signal inputs.A({5'd0,a}), // 30.B(b), // 18.C(c), // 48.CARRYIN(1'b0),.D(25'd0), // 25// cascade ports.ACOUT(),.BCOUT(),.CARRYCASCOUT(),.MULTSIGNOUT(),.PCOUT(),.ACIN(30'h0),.BCIN(18'h0),.CARRYCASCIN(1'b0),.MULTSIGNIN(1'b0),.PCIN(48'h0),// clock enables.CEA1(1'b1), .CEA2(ce[0]),.CEAD(1'b1),.CEALUMODE(1'b1),.CEB1(1'b1), .CEB2(ce[1]),.CEC(ce[2]),.CECARRYIN(1'b1),.CECTRL(1'b1), // opmode.CED(1'b1),.CEINMODE(1'b1),.CEM(1'b1), .CEP(1'b1),.RSTA(1'b0),.RSTALLCARRYIN(1'b0),.RSTALUMODE(1'b0),.RSTB(1'b0),.RSTC(1'b0),.RSTCTRL(1'b0),.RSTD(1'b0),.RSTINMODE(1'b0),.RSTM(1'b0),.RSTP(1'b0));endmodule

  Ex3:(35bit * 25bit,级联)

// wide multiply using 2x DSP48E1
// p = ((a * b) + c), 4 clock pipe delay

`timescale 1ns / 1ps// wide multiply using 2x DSP48E1
// p = ((a * b) + c), 4 clock pipe delay
module mult_35x25(input 	        clock,input signed [24:0]  a,input signed [34:0]  b,input signed [47:0]  c,output signed [64:0] p);wire signed [29:0] low_acout;wire signed [47:0] low_pcout;wire [47:0] 	      p_low3;reg [16:0] 	      p_low4;DSP48E1 #(.A_INPUT("CASCADE"), .AREG(1), .BREG(2)) dsp48_high(// status.OVERFLOW(), .PATTERNDETECT(), .PATTERNBDETECT(), .UNDERFLOW(),// outs.P(p[64:17]), .CARRYOUT(),// control.ALUMODE(4'b0), .CARRYINSEL(3'd0),.CLK(clock),.INMODE(5'b00000),.OPMODE(7'b1010101), // a*b + pcin >> 17// signal inputs.A(30'b0), .B(b[34:17]), .C(48'b0), .CARRYIN(1'b0), .D(25'b0),// cascade ports.ACOUT(), .BCOUT(), .CARRYCASCOUT(), .MULTSIGNOUT(), .PCOUT(),.ACIN(low_acout), .BCIN(18'h0), .CARRYCASCIN(1'b0), .MULTSIGNIN(1'b0),.PCIN(low_pcout),// clock enables, resets.CEA1(1'b1), .CEA2(1'b1), .CEAD(1'b1), .CEALUMODE(1'b1),.CEB1(1'b1), .CEB2(1'b1), .CEC(1'b1), .CECARRYIN(1'b1),.CECTRL(1'b1), .CED(1'b1), .CEINMODE(1'b1), .CEM(1'b1), .CEP(1'b1),.RSTA(1'b0), .RSTALLCARRYIN(1'b0), .RSTALUMODE(1'b0),.RSTB(1'b0), .RSTC(1'b0), .RSTCTRL(1'b0), .RSTD(1'b0),.RSTINMODE(1'b0), .RSTM(1'b0), .RSTP(1'b0));DSP48E1 #(.ACASCREG(1), .AREG(1), .BREG(1)) dsp48_low(// status.OVERFLOW(), .PATTERNDETECT(), .PATTERNBDETECT(), .UNDERFLOW(),// outs.P(p_low3), .CARRYOUT(),// control.ALUMODE(4'b0), .CARRYINSEL(3'd0),.CLK(clock),.INMODE(5'b00000), .OPMODE(7'b0110101),// signal inputs.A({{5{a[24]}},a}), .B({1'b0,b[16:0]}),.C(c),.CARRYIN(1'b0),.D(25'b0),// cascade ports.ACOUT(low_acout), .BCOUT(), .CARRYCASCOUT(), .MULTSIGNOUT(), .PCOUT(low_pcout),.ACIN(30'h0), .BCIN(18'h0), .CARRYCASCIN(1'b0), .MULTSIGNIN(1'b0), .PCIN(48'h0),// clock enables, resets.CEA1(1'b1), .CEA2(1'b1), .CEAD(1'b1), .CEALUMODE(1'b1),.CEB1(1'b1), .CEB2(1'b1), .CEC(1'b1), .CECARRYIN(1'b1),.CECTRL(1'b1), .CED(1'b1), .CEINMODE(1'b1), .CEM(1'b1), .CEP(1'b1),.RSTA(1'b0), .RSTALLCARRYIN(1'b0), .RSTALUMODE(1'b0),.RSTB(1'b0), .RSTC(1'b0), .RSTCTRL(1'b0), .RSTD(1'b0),.RSTINMODE(1'b0), .RSTM(1'b0), .RSTP(1'b0));always @ (posedge clock)beginp_low4 <= p_low3[16:0];endassign p[16:0] = p_low4;initialbegin$dumpfile("dump.vcd");$dumpvars(0);endendmodule

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打字小妙招

打字小妙招 u字的拼音是字之间的组合 例如&#xff1a;奆 v数字可是大写 例如&#xff1a;壹万贰仟叁佰肆拾伍 v数字计算 例如&#xff1a;123

揭秘买车0首付的套路,羊毛出在羊身上

买车现在已经成为很多年轻人的一种追求&#xff0c;不管是城里的还是农村的&#xff0c;也不管有钱没钱&#xff0c;总之&#xff0c;很多年轻人觉得有车层次就是不一样&#xff0c;开出去把妹也很拉风。但是很多人在买车的时候根本就没有考虑自己的经济能力&#xff0c;甚至很…

地震中房子变废墟了,贷款还需要还吗?

2月12日18时31分在河北省廊坊市永清县(北纬39.37度&#xff0c;东经116.67度)发生4.3级地震&#xff0c;震源深度20千米。截止目前暂时没有人员伤亡报告。我国是一个自然灾害比较多的国家&#xff0c;比如地震&#xff0c;泥石流、台风、洪灾等等&#xff0c;这些自然灾害每年都…

远程控制他人电脑

远程控制他人电脑 首先wini打开window设置&#xff0c;选择系统 下划找到&#xff0c;关于&#xff0c;找到&#xff0c;远程 点击启用远程桌面&#xff0c;弹出的选项框中选择确定 然后&#xff0c;winr&#xff0c;打开运行框&#xff0c;输入mstsc点确定。 然后输入需要远…

过年遇到前任借钱, 如何傲娇的拒绝?

春节又到了&#xff0c;过节走亲访友&#xff0c;有一个话题不得不谈&#xff0c;那就是钱&#xff01;都说谈钱伤感情&#xff0c;这话一点都没有错&#xff0c;特别是遇到前任来找你借钱。明明被前任甩得伤痕累累&#xff0c;没想到过年了&#xff0c;有些前任竟然厚着脸皮回…

由传递函数求状态方程

由传递函数求状态方程 直接法 例子 并联法

借呗利息为什么比银行信用贷款高很多?

利息高低取决于3个方面&#xff0c;一个是风险&#xff0c;二个是资金成本&#xff0c;三是市场竞争对收益定价的影响。借呗利息之所以比银行高也离不开这三个因素。首先是风险&#xff0c;借呗面对的据大部分是普通老百姓&#xff0c;门槛比较低&#xff0c;所以相应的风险比较…

全款房抵押贷款利息和抵押率各是多少?

银行房产抵押贷款的利息及抵押率根据不同客户的资质及申请条件&#xff0c;最终结果是不一样的。&#xfffc;首先我们来说下利率&#xff0c;目前银行贷款利率一般都会在基础利率的基础上上浮&#xff0c;目前银行贷款基准利率一年之内是4.35%&#xff1b;1-5年是4.75%&#x…

将simulink中的workspace中的变量画出来

将simulink中的workspace中的变量画出来 第一种方法 设置Scope 允许之后&#xff0c;工作空间会出现变量 在编辑器中输入画图代码 figure %%% scope多个接口 plot(ScopeData.time,ScopeData.signals(1).values,LineWidth, 1) hold on plot(ScopeData.time,ScopeData.si…

房贷等额本金和等额本息有什么区别,为何很多人傻傻分不清?

等额本金和等额本息是房贷最常见的两种还款方式&#xff0c;但两者却有很多差别&#xff0c;而且很多人对如何区分等额本息和等额本金云里雾里&#xff0c;傻傻分不清。 其实要区分等额本金和等额本息也很简单。首先我们来说下等额本金。所谓等额本金就是把房贷金额平分到每个月…

信用卡不能提额,是因为使用了招联金融吗?

最近在网上看到一个网友说&#xff0c;自己在招联金融上借了1万块钱&#xff0c;之后申请招商银行信用卡提额失败&#xff0c;所以他怀疑使用招联金融影响了信用卡的提额。那这到底是不是真的呢&#xff1f;联金融是招商银行和联通共同推出的消费贷款&#xff0c;可以算是网贷的…

TimeGen的使用

TimeGen的使用 TimeGen的入门使用

环球黑卡是不是很牛逼?

环球黑卡环球黑卡是很牛逼&#xff0c;估计听说过的人都有这样的疑问。近段就有一个网友在支付宝上抽到了环球黑卡&#xff0c;如果很牛逼还能抽奖送&#xff1f;所谓抽奖获得环球黑卡&#xff0c;可能是商家跟支付宝联合推出的活动&#xff0c;但是也不要太激动。这个环球黑卡…

使用蚂蚁借呗会影响房贷申请吗?

首先可以肯定的是&#xff0c;目前如果有借呗微粒贷未还清的会影响房贷的申请。我也是在2017年9月在深圳龙岗工行申请的房贷&#xff0c;当时银行查看征信发现有一笔招联金融5000多元分期消费贷款未还清&#xff0c;提交完资料后银行没有进件&#xff0c;而是要求我把这5000多元…

MATLAB设置启动文件夹为上次退出时的工作文件夹

MATLAB设置启动文件夹为上次退出时的工作文件夹 右击执行快捷方式&#xff0c;选择属性 -useStartupFolderPref 将 -useStartupFolderPref 放入到末尾。

银行工作人员违规发放贷款要坐牢吗?

首先需要说明的是&#xff0c;当前银行监管非常严格&#xff0c;处罚力度历史罕见&#xff0c;违规发放贷款肯定是要被罚的。我们先来看下一组数据&#xff1a; 截至2018年1月各级银监部门共披露497张罚单&#xff08;含2017年作出的处罚决定但在2018年公布&#xff09;&#x…

Job 失败了怎么办?- 每天5分钟玩转 Docker 容器技术(133)

上一节讨论了 Job 执行成功的情况&#xff0c;如果失败了会怎么样呢&#xff1f; 修改 myjob.yml&#xff0c;故意引入一个错误&#xff1a; 先删除之前的 Job&#xff1a; 如果将 restartPolicy 设置为 OnFailure 会怎么样&#xff1f;下面我们实践一下&#xff0c;修改 myjob…

S函数介绍

S函数介绍 S函数中使用文本方式输入公式和方程&#xff0c;适合复杂动态系统的数学描述&#xff0c;并且在仿真过程中可以对仿真参数进行更精确的描述。 S函数模块是整个Simulink动态系统的核心。 S函数时系统函数&#xff08;system function&#xff09;的简称&#xff0c;是…

征信一个月查40次,还能贷款吗?

今日头条有个网友问了个有趣的问题&#xff0c;他说自己芝麻信用分724&#xff0c;贷款信用卡从来没有逾期过&#xff0c;但是最近一个月查了40多次的贷款。所以这个网友对贷款机构提出疑问&#xff0c;自己信用良好&#xff0c;从没有逾期&#xff0c;为何贷款屡屡被拒&#x…

信用卡积分能兑换现金,靠谱吗?

信用卡积分兑换现金&#xff0c;有真有假&#xff0c;但是假的居多。首先我们来说下真的部分说到信用卡积分能换现金&#xff0c;这个估计大家都不相信&#xff0c;因为在大家的认知里面&#xff0c;信用卡的积分只能用于兑换一些物品&#xff0c;什么时候看到银行给你兑换现金…