ise中rom仿真出现的问题及解决方法

分类: Xilinx/Intel-IP核 |
2017年3月15日23:28:11
1、代码注意的问题
(1)//五个移位乘法器
always @ (posedge sclk or negedge rst_n)
if(rst_n == 1'b0) begin
result1 <= 'd0;
result2 <= 'd0;
result3 <= 'd0;
result4 <= 'd0;
result5 <= 'd0;
end
else if(start_cal_flag == 1'b1) begin //注意下面移位操作的位置要加括号
result1 <=
(data_a<<1)
(data_a<<1) data_a
data_b;
data_b;
result2 <=
(data_a<<1)
(data_a<<1)
(data_b<<1);
(data_b<<1);
result3 <=
(data_a<<1) data_a
(data_b<<1)
data_b;
data_b;
result4 <=
(data_a<<1)
(data_b<<1)
(data_b<<1);
(data_b<<1);
result5 <= data_a
(data_b<<1)
(data_b<<1)
data_b;
data_b;
end
(2)
module top_inter(
input wire sclk,
input wire rst_n,
input wire start,
output wire [10:0] w_ram_addr, //写ram地址
output wire [15:0] w_ram_data, //写ram数据
output wire cal_end_flag //计算完220组rs标志
);
//不定义综合工具默认生成单比特信号
wire [7:0] r_rom_data1;
wire [7:0] r_rom_data2;
wire [7:0] r_rom_addr1;
wire [7:0] r_rom_addr2;
inter inter_inst(
.sclk (sclk ),
.rst_n (rst_n ),
.r_rom_data1 (r_rom_data1 ), //读出的rom1数据
.r_rom_data2 (r_rom_data2 ), //读出的rom2数据
.start (start ), //启动模块
.w_ram_addr (w_ram_addr ), //写ram地址
.w_ram_data (w_ram_data ), //写ram数据
.r_rom_addr1 (r_rom_addr1 ), //rom1读地址
.r_rom_addr2 (r_rom_addr2 ), //rom2读地址
.cal_end_flag (cal_end_flag )
//计算完220组rs标志
//计算完220组rs标志
// .group_end_flag1 //用于仿真验证
);
rom_220x8 rom_220x8_1 (
addra
douta
);
rom_220x8 rom_220x8_2 (
addra
douta
);
endmodule
2、ise中rom的初始化文件为.coe文件。文件格式如下:
memory_initialization_radix=10;
memory_initialization_vector=
1,
2,
3,
4,
5,
6,
7,
8,
9,
10;
第一行为进制,下面的为数据。数据之间使用“,”分隔,最后一个数据后使用“;”,数据个数与rom个数相同,否则会出现错误。
3、在ise软件中产生rom的IP核成功后,会自动在ise工程文件夹下的IPcore_dir中产生一个与初始化文件(.coe)名字相同的.mif文件。使用modelsim仿真ise的rom的时候,不仅需要将.coe文件复制到modelsim仿真目录下,也要将这个.mif文件复制过去。否则不能成功初始化rom。
4、需要手动添加ise仿真库,和ise全局仿真文件
5、具体如下图:
(1)ise工程文件夹下ipcore_dir中自动根据.coe文件产生.mif文件http://s5/mw690/006hC78Ezy79x19NaL234&690
(2)modelsim仿真文件夹http://s3/mw690/006hC78Ezy79x1gd1R012&690
(3)modelsim仿真文件夹下添加的ise库http://s16/mw690/006hC78Ezy79x1ikoWPbf&690
前一篇:乒乓操作示例
后一篇:Verilog操作符总结