题解 | #移位运算与乘法#

移位运算与乘法

http://www.nowcoder.com/practice/1dd22852bcac42ce8f781737f84a3272

要输出有效输入标志input_grant,考虑定义一个寄存器变量(cnt)用于计数。

计数最大值就是乘法运算次数(四次),在一个计数周期内输入保持不变

当计数器为0时,input_grant=1,其余时刻保持低电平;将出入d赋值给寄存器reg_d;

当计数器达到最大值时,计数器清零,其中计数器每次加一对应一次乘法运算。

参考代码:

`timescale 1ns/1ns
module vl4 (
input [7:0]d ,
input clk,
input rst,
output reg input_grant,
output reg [10:0]out
);
//*************code***********//
    reg [1:0] cnt;
    reg [7:0] reg_d;
//*******计数器初始化及赋值*******//    
always@(posedge clk or negedge rst)
    if(rst == 1'b0)
        cnt <= 2'd0;
    else if(cnt == 2'd3)
        cnt <= 2'd0;
    else 
        cnt <= cnt + 1'b1;
//***数据寄存器(reg_d)和输入有效标志(input_grant)初始化及赋值***// 
always@(posedge clk or negedge rst)
    if(rst == 1'b0)begin
        reg_d <= 8'd0;
        input_grant <= 1'b0;
    end
    else if(cnt == 2'd0)begin
        reg_d <= d;
        input_grant <= 1'b1;
    end
    else begin
        reg_d <= reg_d;
        input_grant <= 1'b0;
    end
//****乘法运算****//       
always@(posedge clk or negedge rst)
    if(rst == 1'b0) 
        out <= 11'd0;
    else case (cnt)
        2'd0 : out <= d;
        2'd1 : out <= (reg_d<<2)-reg_d;
        2'd2 : out <= (reg_d<<3)-reg_d;
        2'd3 : out <= (reg_d<<3);
        default : out <= 11'd0;
    endcase
//*************code***********//
endmodule

测试代码:

`timescale 1ns/1ns
module tb_vl4();
reg clk;
reg rst;
reg [7:0] d;

wire input_grant;
wire [10:0] out;
//***时钟,复位,d信号赋值***//
initial 
    begin
        clk = 1'b0;
        rst = 1'b0;
        d   = 8'd0;
        #30
        rst = 1'b1;             
        d   = 8'd8;
        #80
        d   = 8'd9;
        #80
        d   = 8'd10;
    end 
//***生成时钟信号***//
always #10 clk =~clk;
//***模块实例化***//    
vl4 vl4_inst
(
    .d          (d) ,
    .clk        (clk) ,
    .rst        (rst) ,
    .input_grant(input_grant) ,
    .out        (out)
);        
    
endmodule

仿真结果对照:

alt

全部评论
为什么我仿真出来out会延迟一个时钟呢
点赞 回复 分享
发布于 2022-03-12 23:04
这个仿真波形,cnt时序逻辑计数,当复位信号拉高,为啥没有延迟一个周期开始计数
2 回复 分享
发布于 2022-06-08 18:45
不行啊, 你这个不能对输入pipe
1 回复 分享
发布于 2022-10-14 17:49 四川
testbench里面缺了`include "vl4.v"
点赞 回复 分享
发布于 2024-02-27 10:48 美国

相关推荐

积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
评论
34
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务