欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL77

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

2025/2/23 20:07:07 来源:https://blog.csdn.net/qq_44629558/article/details/142369134  浏览:    关键词:【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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词