IP核使用
1 设计要求分析
IP核即知识产权核或知识产权模块,是将一些在数字电路中经常使用但较为复杂的功能模组设计为可修改参数的模块。在工程设计中使用IP核,有助于短时间内完成复杂的工程设计,从而提高工程设计效率。因此本实验将利用ROM和multiplier IP核实现两个6位二进制数的乘法运算。
2 系统设计
2.1 总体设计思路
本实验采用两个ROM存储两个6位二进制数作为因数,用multiplier实现两个因数相乘并输出乘积。
2.2 接口设计
端口名 | I/O | 功能描述 |
---|---|---|
I_sys_clk_50M | input | 系统输入时钟50MHz |
I_sys_rst_n | input | 系统复位信号(低电平使能) |
I_rom_enable | input | ROM使能信号,同时控制两个存储器(高电平使能) |
O_mult_data | output | 乘法器输出结果 |
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核间的连接