当前位置: 首页 > wzjs >正文

灰色网站门户网站宣传方案

灰色网站,门户网站宣传方案,南京浦口网站建设,wordpress 搜索内容Verilog自适应位宽与固定位宽的不兼容问题 问题起源 我在写verilog代码的时候,有两个模块shifter和round,参数化的shifter模块已经通过了测试,round模块是shifter的上层模块,对round模块进行16位测试的时候,顺利通过…

Verilog自适应位宽与固定位宽的不兼容问题

问题起源

我在写verilog代码的时候,有两个模块shifter和round,参数化的shifter模块已经通过了测试,round模块是shifter的上层模块,对round模块进行16位测试的时候,顺利通过测试,但是在进行24位测试的时候发现仿真总是报一大堆红色的叉:
在这里插入图片描述

排错流程

首先怀疑round写错了,但是反复查阅文献和公式,发现并没有错误,因此进一步怀疑是shifter出错了,再一次测试shifter的24位执行情况,发现shifter参数化执行得非常好,无论是多少位的测试都能正确执行,于是明确了:

shifter模块完全正确,通过测试,错误只有可能是round里面发生的

因而再次检视round的代码,其中x_out的结果由三个通过shifter计算得到的变量共同计算得出,于是将这三个变量的值也设置为round的输出展示出来(也就是图中的a,b,c),以便检错,仿真运行得到的结果如图:
在这里插入图片描述
可见,三个通过shifter计算得到的变量也是红色的叉,这表明shifter模块并未能正确计算出这些值,前面已经得到结论:
shifter模块完全正确,通过测试,错误只有可能是round里面发生的
但是,现有条件可以推断出:shifter模块并未能正确计算出这些值

综上,错误范围可以进一步缩小,应该在round调用shifter的过程中出现了问题

检错步骤

重新检视round的代码,发现对shifter的调用中似乎出现了问题:
在这里插入图片描述
再确认shifter中对参数的描述:
在这里插入图片描述
这里面显然,shifter模块的shifter_amount变量属于自适应位宽的值,然而round在调用的过程中,指定了1,8,2的位宽为4位,当参数n=24时,传入shifter会自适应地计算shifter_amount的位宽,也就是24取对数,那么位宽就是5,这与调用shifter时传入的参数4'd8(指明位宽为4)不同,因而导致了shifter模块执行出错。
至此,得到了问题的关键:
round模块在调用shifter时,提供了指定位宽的变量,然而shifter在获取该变量时设定了自适应位宽,从而导致了shifter模块失效,最终造成了round模块输出结果全是红叉的问题

问题解决

在round模块中,将指定的位宽值去掉:

  //decryption  shifter #(n) S1 (y_in, 1'b0, 1, S1_sig_1);shifter #(n) S2 (y_in, 1'b0, 8, S8_sig_1);shifter #(n) S3 (y_in, 1'b0, 2, S2_sig_1);//encryptionshifter #(n) S11 (x_in, 1'b0, 1, S1_sig_0);shifter #(n) S22 (x_in, 1'b0, 8, S8_sig_0);shifter #(n) S33 (x_in, 1'b0, 2, S2_sig_0);

再次执行仿真,结果如下图,可以见得红叉没有了:
在这里插入图片描述
使用c语言编写执行相同操作的代码:

void RoundCaculate(mpz_t x_in, mpz_t y_in, mpz_t key, mpz_t x_out, mpz_t y_out, int width, bool mode) {mpz_t s1, s2, s8;mpz_init(s1);mpz_init(s2);mpz_init(s8);if (mode)//mode=1进行加密,mode=0进行解密{//加密操作shifter(s1, x_in, 1, 0, width);shifter(s2, x_in, 2, 0, width);shifter(s8, x_in, 8, 0, width);mpz_and(x_out, s1, s8);mpz_xor(x_out, x_out, y_in);mpz_xor(x_out, x_out, s2);mpz_xor(x_out, x_out, key);mpz_set(y_out, x_in);}else {//解密操作shifter(s1, y_in, 1, 0, width);shifter(s2, y_in, 2, 0, width);shifter(s8, y_in, 8, 0, width);mpz_and(y_out, s1, s8);mpz_xor(y_out, y_out, x_in);mpz_xor(y_out, y_out, s2);mpz_xor(y_out, y_out, key);mpz_set(x_out, y_in);}//gmp_printf("\n%Zx\n%Zx\n%Zx\n",s1,s2,s8);mpz_clear(s1);mpz_clear(s2);mpz_clear(s8);
}

使用相同的样例进行测试:
在这里插入图片描述
可以看到两次测试结果一致,问题顺利解决。

反思

既然都下决心要参数化,那就尽量少指定位宽。


文章转载自:

http://xX3AGULO.rdsst.cn
http://iTtPlQkx.rdsst.cn
http://8ESSI9ok.rdsst.cn
http://wNKnzQVg.rdsst.cn
http://MofDkBGi.rdsst.cn
http://0y90m2ds.rdsst.cn
http://U6M90Yyu.rdsst.cn
http://opw08J3b.rdsst.cn
http://9qzrvWDJ.rdsst.cn
http://ISM3ErnN.rdsst.cn
http://Wqk6WIwY.rdsst.cn
http://8QSY6eE9.rdsst.cn
http://jowoR9S0.rdsst.cn
http://jEBkmHc9.rdsst.cn
http://TyhlLjkR.rdsst.cn
http://zSygarHE.rdsst.cn
http://XUFHCbva.rdsst.cn
http://Hb0SU8FX.rdsst.cn
http://Np6bhXbJ.rdsst.cn
http://ZT1NGviI.rdsst.cn
http://e0xININ8.rdsst.cn
http://vw9q7fFR.rdsst.cn
http://0dx386XR.rdsst.cn
http://XfC1LjPF.rdsst.cn
http://m94H9cAC.rdsst.cn
http://hmSb0og4.rdsst.cn
http://pyx9KYEU.rdsst.cn
http://Aak3WTuN.rdsst.cn
http://0fkfGeYE.rdsst.cn
http://eseCWQeW.rdsst.cn
http://www.dtcms.com/wzjs/723721.html

相关文章:

  • 自己做的网站能备案吗哈尔滨网站建设排行
  • 戴尔公司网站建设的特点是什么wordpress图片模糊加载
  • 银川哪里做网站网页版哔哩哔哩怎么下载视频
  • 网站建站平台eazyshop装修哪家好
  • 网站做百度竞价利于百度优化网络维护工作怎么样
  • 老版本网站开发工具如何修改网站后台
  • 网站的后台管理装修公司装修房子
  • 新手如何学网站建设好的推广方式
  • 导航网站分析教育网站建设收费
  • 宜昌网站设计制作公司wordpress 360友链
  • app网站建设宣传方案wordpress 开启维护
  • wordpress 多站点 主站点wordpress 舆情管理
  • 禹城网站建设公司网站建设优化开发公司哪家好
  • 重庆外贸网站建设上海网站设计开发公
  • 齐河网站建设公司价格做网站专题页需要注意什么
  • 怎么在百度上建网站照片视频制作软件
  • 石家庄西晨网站开发医药行业网站建设
  • 做网络传销网站犯法吗thinkcmf和wordpress
  • 餐饮网站网页设计代码me域名的网站
  • 网站建设江西有多少家wordpress 带数据库吗
  • 中国建设银行什么是网站用户名济南网站建设新风向
  • 公司做外地网站wordpress手机颜色
  • 天河网站建设专家wordpress必下载工具
  • dw做的网站放文件夹网站设计建设企业
  • 已有网站做百度推广中山seo代理商
  • 八角网站建设郑州网络开发公司有哪些
  • 网站开发吃香吗快速赚钱软件
  • 一个人可以做网站吗那些小网站是哪里人做的
  • 网站开发亿玛酷专注4杭州网站建设方案
  • 厦门企业网站开发公司网站服务器租用技巧