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

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL77

编写乘法器求解算法表达式

描述

编写一个4bit乘法器模块,并例化该乘法器求解c=12*a+5*b,其中输入信号a,b为4bit无符号数,c为输出。注意请不要直接使用*符号实现乘法功能。

模块的信号接口图如下:

    要求使用Verilog HDL语言实现以上功能,并编写testbench验证模块的功能。

输入描述:

clk:系统时钟信号

rst_n:复位信号,低电平有效

a:输入信号,位宽为4bit

b:输入信号,位宽为4bit

输出描述:

c:输出信号

解题思路:

移位运算与乘法的关系如下:

左移n位表示2^n;

右移n位表示2^n;

当直接在一个always语句块中写入代码,如下所示:

`timescale 1ns/1nsmodule calculation(input clk,input rst_n,input [3:0] a,input [3:0] b,output [8:0] c);wire [8:0] a_9, b_9;reg [8:0] c_r;assign a_9 = {5'b0_0000, a[3:0]};assign b_9 = {5'b0_0000, b[3:0]};always @(posedge clk or negedge rst_n) beginif (!rst_n) c_r <= 9'b0_0000_0000;else c_r <= (a_9<<3)+(a_9<<2)+(b_9<<2)+b_9;endassign c = c_r;endmodule

可发现其波形如下:

如红色方框所示,最终输出C的值是在第二个时钟上升沿的到来时才正常输出,因此在信号a,b输入时,应该打一拍

正确的代码如下:
`timescale 1ns/1nsmodule calculation(input clk,input rst_n,input [3:0] a,input [3:0] b,output [8:0] c);reg [8:0] a_9, b_9;reg [8:0] c_r;always @(posedge clk or negedge rst_n) beginif (!rst_n) begina_9 <= 9'b0_0000_0000;b_9 <= 9'b0_0000_0000;endelse begina_9 <= {5'b0_0000, a[3:0]};b_9 <= {5'b0_0000, b[3:0]};endendalways @(posedge clk or negedge rst_n) beginif (!rst_n) c_r <= 9'b0_0000_0000;else c_r <= (a_9<<3)+(a_9<<2)+(b_9<<2)+b_9;endassign c = c_r;endmodule

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux 生成 git ssh 公钥
  • Linux 内核的版本控制
  • linux-系统备份与恢复-系统恢复
  • Redis主要问题
  • C语言习题~day25
  • mac 怎么查看CPU核数
  • Arthas jvm(查看当前JVM的信息)
  • 2024年全新deepfacelive如何对应使用直播伴侣-腾讯会议等第三方软件
  • 毕业设计选题:基于springboot+vue+uniapp的驾校报名小程序
  • 图像锐化的算法总结
  • Linux 基础入门操作 第九章 进程间通信之管道
  • 【数据结构初阶】链式二叉树接口实现超详解
  • S3C2440中断
  • AI学习指南深度学习篇-Adam的Python实践
  • python-3n+1数链/233
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • ES6系统学习----从Apollo Client看解构赋值
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Javascript 原型链
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • leetcode386. Lexicographical Numbers
  • Next.js之基础概念(二)
  • PAT A1050
  • Promise初体验
  • 百度小程序遇到的问题
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 彻底搞懂浏览器Event-loop
  • 从0实现一个tiny react(三)生命周期
  • 如何设计一个微型分布式架构?
  • 如何在 Tornado 中实现 Middleware
  • -- 数据结构 顺序表 --Java
  • 与 ConTeXt MkIV 官方文档的接驳
  • 说说我为什么看好Spring Cloud Alibaba
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • # .NET Framework中使用命名管道进行进程间通信
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #{} 和 ${}区别
  • #HarmonyOS:基础语法
  • #pragma预处理命令
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (函数)颠倒字符串顺序(C语言)
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (七)glDrawArry绘制
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • .apk文件,IIS不支持下载解决
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .form文件_SSM框架文件上传篇
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net 反编译_.net反编译的相关问题
  • //解决validator验证插件多个name相同只验证第一的问题
  • []AT 指令 收发短信和GPRS上网 SIM508/548