求助,Verilog vivado 存储器辅助仿真

 求助,源码如下

reg[7:0] mem[0:4];

initial begin
       $readmemb("D:\vivado\DATA\TESTTESTTEST\om.txt",mem,0,4);
end

就是读不进定义的存储器里,报错如下

File D:vivadoDATATESTTESTTESTom.txt referenced on D:/vivado/DATA/TESTTESTTEST/TESTTESTTEST.srcs/sim_1/new/sim_TESTTEST2.v at line 88 cannot be opened for reading. Please ensure that this file is available in the current working directory.

文本权限改了,也放到工作目录下了,但是还是读不进来。希望有人帮忙看看。用的是vivado2015.4.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
好的,这是一个关于使用FPGA内部静态存储器将机器指令写入coe文件并进行仿真运行的问题。以下是具体的代码和在Vivado中的操作步骤: 1. 编写Verilog代码 以下是一个简单的Verilog代码,用于实现一个基本的多周期CPU,并使用FPGA内部静态存储器存储和运行机器指令。该代码包括指令存储器、数据存储器、ALU、控制单元等基本模块。 ``` module cpu ( input clk, input rst, input [15:0] inst_addr, input [15:0] data_addr, input [15:0] data_in, output [15:0] data_out ); // 定义指令存储器和数据存储器 reg [15:0] inst_mem [0:255]; reg [15:0] data_mem [0:255]; // 定义CPU内部寄存器 reg [15:0] pc; reg [15:0] ir; reg [15:0] a; reg [15:0] b; reg [15:0] alu_out; reg [15:0] mem_addr; reg [15:0] mem_data; // 定义控制单元 reg [3:0] state; reg [2:0] opcode; reg [2:0] funct; // 定义状态机 parameter FETCH = 0; parameter DECODE = 1; parameter EXECUTE = 2; parameter MEM = 3; parameter WRITEBACK = 4; always @(posedge clk) begin if (rst) begin // 初始化CPU内部寄存器 pc <= 0; ir <= 0; a <= 0; b <= 0; alu_out <= 0; mem_addr <= 0; mem_data <= 0; // 初始化控制单元 state <= FETCH; opcode <= 0; funct <= 0; end else begin case (state) FETCH: begin // 从指令存储器中获取指令 ir <= inst_mem[pc]; pc <= pc + 1; state <= DECODE; end DECODE: begin // 解码指令,获取操作码和功能码 opcode <= ir[15:13]; funct <= ir[2:0]; state <= EXECUTE; end EXECUTE: begin // 执行指令 case (opcode) 3'b000: begin // ADD a <= data_mem[ir[8:6]]; b <= data_mem[ir[2:0]]; alu_out <= a + b; state <= WRITEBACK; end 3'b001: begin // SUB a <= data_mem[ir[8:6]]; b <= data_mem[ir[2:0]]; alu_out <= a - b; state <= WRITEBACK; end 3'b010: begin // AND a <= data_mem[ir[8:6]]; b <= data_mem[ir[2:0]]; alu_out <= a & b; state <= WRITEBACK; end 3'b011: begin // OR a <= data_mem[ir[8:6]]; b <= data_mem[ir[2:0]]; alu_out <= a | b; state <= WRITEBACK; end 3'b100: begin // XOR a <= data_mem[ir[8:6]]; b <= data_mem[ir[2:0]]; alu_out <= a ^ b; state <= WRITEBACK; end 3'b101: begin // LOAD mem_addr <= ir[2:0]; state <= MEM; end 3'b110: begin // STORE mem_addr <= ir[2:0]; mem_data <= data_mem[ir[8:6]]; state <= MEM; end 3'b111: begin // JUMP pc <= ir[8:0]; state <= FETCH; end endcase end MEM: begin // 访问数据存储器 case (opcode) 3'b101: begin // LOAD data_out <= data_mem[mem_addr]; state <= WRITEBACK; end 3'b110: begin // STORE data_mem[mem_addr] <= mem_data; state <= WRITEBACK; end endcase end WRITEBACK: begin // 写回数据存储器 case (funct) 3'b000: begin // ALU data_mem[ir[8:6]] <= alu_out; end 3'b001: begin // MEMORY data_mem[ir[8:6]] <= data_out; end endcase state <= FETCH; end endcase end end endmodule ``` 2. 创建coe文件 您可以使用文本编辑器创建一个coe文件,其中包括机器指令的十六进制表示。如前面所述,coe文件的格式应该是: ``` memory_initialization_radix=16; memory_initialization_vector= 0000, 0010, 0001, 0000, // 0x2000 0000, 0011, 0100, 0000, // 0x3400 0000, 1010, 0000, 0001, // 0xA001 ... 0000, 0000, 0000, 0000; // 0x0000 ``` 您需要将机器指令转换为十六进制,并将其放入coe文件中。 3. 在Vivado中创建工程 在Vivado中创建一个新工程,并添加一个Verilog模块。将上面的Verilog代码粘贴到Verilog模块中,并添加一个coe文件作为初始存储器的初始化数据。 4. 进行仿真Vivado中打开仿真视图,并添加一个仿真波形。运行仿真,观察数据存储器的写回结果。 以上就是使用FPGA内部静态存储器将机器指令写入coe文件并进行仿真运行的具体代码和在Vivado中的操作步骤。希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值