数电实验3:IP核使用

1 设计要求分析

        IP核即知识产权核或知识产权模块,是将一些在数字电路中经常使用但较为复杂的功能模组设计为可修改参数的模块。在工程设计中使用IP核,有助于短时间内完成复杂的工程设计,从而提高工程设计效率。因此本实验将利用ROM和multiplier IP核实现两个6位二进制数的乘法运算。

2 系统设计

2.1 总体设计思路

        本实验采用两个ROM存储两个6位二进制数作为因数,用multiplier实现两个因数相乘并输出乘积。

2.2 接口设计

端口名I/O功能描述
I_sys_clk_50Minput系统输入时钟50MHz
I_sys_rst_ninput系统复位信号(低电平使能)
I_rom_enableinputROM使能信号,同时控制两个存储器(高电平使能)
O_mult_dataoutput乘法器输出结果

2.3 IP核

2.3.1 ROM

        采用Block Memory Generator(8.4),选择Single Port ROM,并将地址线数修改为6,位线数修改为6。编写coe文件规定ROM中存储的二进制数并将文件导入IP核中。ROM的输入为wire变量I_sys_clk_50M,I_rom_enable和reg[5:0]变量cnt_rom_read_addr,用于读入0-63个地址;输出为wire[5:0]型变量data_rom_to_mul_A和data_rom_to_mul_B,即分别用两个ROM输出两个因数。

2.3.2 multiplier

        采用Multiplier(12.0),设置两个输入的因数的位宽为6,unsigned类型。Multiplier的输入为wire型变量I_sys_clk_50M,data_rom_to_mul_A和data_rom_to_mul_B,输出为wire[11:0]型变量O_mult_data,即系统的最终输出。

功能仿真设计

3.1源程序设计

代码.

`timescale 1ns / 1ps
module IP_core(
            input           I_sys_clk_50M,           //系统输入时钟50MHz
            input           I_sys_rst_n,             //系统复位信号
            input           I_rom_enable,            //ROM使能信号,同时控制两个ROM
            
            output [11:0]   O_mult_data              //乘法器输出结果
    );


reg         [5:0]           cnt_rom_read_addr;       //ROM读地址
wire        [5:0]           data_rom_to_mul_A;       //ROM读取数据A
wire        [5:0]           data_rom_to_mul_B;       //ROM读取数据B

//IP核寻址计数器的计数规则
always@(posedge I_sys_clk_50M or negedge I_sys_rst_n) begin
        if(!I_sys_rst_n)begin
            cnt_rom_read_addr <= 6'd0;
        end
        else if (I_rom_enable)begin
            if(cnt_rom_read_addr == 6'd63)begin
                cnt_rom_read_addr <= 6'd0;
            end
            else begin
                cnt_rom_read_addr <= cnt_rom_read_addr + 1'b1;
            end
        end
        else begin 
            cnt_rom_read_addr <= 6'd0;
        end
end

3.2 testbench程序设计

代码.

 `timescale 1ns / 1ps
module IP_core_test(
    );
reg             I_sys_clk_50M;          //模拟系统时钟
reg             I_sys_rst_n;            //模拟复位信号
reg             I_rom_enable;           //模拟寄存器使能
wire    [11:0]  O_mult_data;            //链接待测试模块用于观察

initial begin
            I_sys_clk_50M <= 1'b0;
            I_sys_rst_n   <= 1'b0;
            I_rom_enable  <= 1'b0;
            
            #10 I_sys_rst_n = 1'b1;
            #50 I_rom_enable = 1'b1;
end

always #10 I_sys_clk_50M = ~I_sys_clk_50M;

IP_core IP_core_test(
        .I_sys_clk_50M(I_sys_clk_50M),
        .I_sys_rst_n(I_sys_rst_n),
        .I_rom_enable(I_rom_enable),
        
        .O_mult_data(O_mult_data)
);
endmodule

##3.3 时序仿真波形在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 结果分析

由上述结果可以知道本程序可以实现数字1-63的平方的输出。

4 思考

        ROM在60ns后开始使能,在时钟信号的上升沿触发,对wire型信号data_rom_to_mul_A采样,由于存在门延迟,因此此时采样值仍为上一个周期内的值。同理Multiplier在一个时钟上升沿到来时输出的为上一个时钟周期内两个因数的乘积,因此读取的ROM信号与乘法器输出信号存在时间延迟。

        改变COE文件数据即改变ROM内部存储的二进制数,改变后的coe如下:

memory_initialization_radix=10;
memory_initialization_vector=
1,
2,
2,
31,
4,
5,
6,
9,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
9,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63;

输出的部分时序仿真图如下:
在这里插入图片描述

5 小结与感想

        通过本次实验可以熟悉IP核的应用,了解IP核参数的设置与IP核间的连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sue٩(๑•̀ω•́๑)۶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值