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

动态设计参考网站哈尔滨企业自助建站

动态设计参考网站,哈尔滨企业自助建站,网站建二级目录,seo基础教程视频Verilog自适应位宽与固定位宽的不兼容问题 问题起源 我在写verilog代码的时候#xff0c;有两个模块shifter和round#xff0c;参数化的shifter模块已经通过了测试#xff0c;round模块是shifter的上层模块#xff0c;对round模块进行16位测试的时候#xff0c;顺利通过…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在调用的过程中指定了182的位宽为4位当参数n24时传入shifter会自适应地计算shifter_amount的位宽也就是24取对数那么位宽就是5这与调用shifter时传入的参数4d8指明位宽为4不同因而导致了shifter模块执行出错。 至此得到了问题的关键 round模块在调用shifter时提供了指定位宽的变量然而shifter在获取该变量时设定了自适应位宽从而导致了shifter模块失效最终造成了round模块输出结果全是红叉的问题。 问题解决 在round模块中将指定的位宽值去掉 //decryption shifter #(n) S1 (y_in, 1b0, 1, S1_sig_1);shifter #(n) S2 (y_in, 1b0, 8, S8_sig_1);shifter #(n) S3 (y_in, 1b0, 2, S2_sig_1);//encryptionshifter #(n) S11 (x_in, 1b0, 1, S1_sig_0);shifter #(n) S22 (x_in, 1b0, 8, S8_sig_0);shifter #(n) S33 (x_in, 1b0, 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)//mode1进行加密mode0进行解密{//加密操作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://www.w-s-a.com/news/961393/

相关文章:

  • 学做网站培训机构wordpress 图片拉伸
  • 成都捕鱼网站建设wordpress自定义文章类别
  • wordpress网站怎么加速湖北网站建设企业
  • 迁安做网站中的cms开发南平网站建设公司
  • 肥西县住房和城乡建设局网站代驾系统定制开发
  • 网站建设明细报价表 服务器qq是哪家公司的产品
  • html链接网站模板wordpress怎么调用简码
  • 网站域名怎么查简述网站推广的五要素
  • 咸宁网站设计公司app安装下载
  • 丝网外贸做哪些网站最优的赣州网站建设
  • 如何做网站不被查网站开发工程师岗位说明书
  • 做网站需要vps吗网站建设后怎样发信息
  • 网站建立风格二手交易网站开发可参考文献
  • 成都微信网站开发优化大师优化项目有哪些
  • 哪个网站做自考题目免费郑州网站建设公司qq
  • 地方性的网站有前途顺的网络做网站好不好
  • 学校申请建设网站的原因不要网站域名
  • 推荐响应式网站建设子域名查询工具
  • 如何建设学校的微网站广告推广是什么
  • 设计类专业哪个就业前景好网站建设seoppt
  • 济南建站公司网站网站友链查询源码
  • 校园失物招领网站建设涪陵网站建设公司
  • 怎么做盗号网站手机网站建设需要租用什么科目
  • 成品网站是什么意思沈阳seo推广
  • 购物网站后台流程图昆明官网seo技术
  • 创建自己网站全网零售管理系统
  • 江苏省建设厅网站建筑电工证wordpress收费插件大全
  • 北京中国建设银行招聘信息网站宁德蕉城住房和城乡建设部网站
  • 泉州做网站优化哪家好wordpress站点预览
  • 创建门户网站一页网站首页图如何做