瓯北网站建设,wordpress怎么更改端口登陆,首都建设网,开发信息系统软件有哪些编写乘法器求解算法表达式
描述
编写一个4bit乘法器模块#xff0c;并例化该乘法器求解c12*a5*b#xff0c;其中输入信号a,b为4bit无符号数#xff0c;c为输出。注意请不要直接使用*符号实现乘法功能。
模块的信号接口图如下#xff1a; 要求使用Verilog HDL语言实现以上…编写乘法器求解算法表达式
描述
编写一个4bit乘法器模块并例化该乘法器求解c12*a5*b其中输入信号a,b为4bit无符号数c为输出。注意请不要直接使用*符号实现乘法功能。
模块的信号接口图如下 要求使用Verilog HDL语言实现以上功能并编写testbench验证模块的功能。
输入描述
clk系统时钟信号
rst_n复位信号低电平有效
a输入信号位宽为4bit
b输入信号位宽为4bit
输出描述
c输出信号
解题思路
移位运算与乘法的关系如下 左移n位表示乘; 右移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 {5b0_0000, a[3:0]};assign b_9 {5b0_0000, b[3:0]};always (posedge clk or negedge rst_n) beginif (!rst_n) c_r 9b0_0000_0000;else c_r (a_93)(a_92)(b_92)b_9;endassign c c_r;endmodule
可发现其波形如下 如红色方框所示最终输出C的值是在第二个时钟上升沿的到来时才正常输出因此在信号ab输入时应该打一拍
正确的代码如下
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 9b0_0000_0000;b_9 9b0_0000_0000;endelse begina_9 {5b0_0000, a[3:0]};b_9 {5b0_0000, b[3:0]};endendalways (posedge clk or negedge rst_n) beginif (!rst_n) c_r 9b0_0000_0000;else c_r (a_93)(a_92)(b_92)b_9;endassign c c_r;endmodule