在这个Verilog项目,用于16位的Verilog代码 RISC 介绍了处理器。
RISC处理器是根据其指令集和 哈佛大学类型的数据路径结构。然后,在 Verilog 并使用Xilinx ISIM进行了验证。

RISC的指令集 处理器:
A.内存访问说明
1.载入字词:
LD ws,offset(rs1)ws:= m16 [rs1 +偏移量]
2.储存字词:
2.储存字词:
ST rs2,offset(rs1)Mem16 [rs1 + offset] = rs2
B.数据处理指令
1.添加:
B.数据处理指令
1.添加:
添加ws,rs1,rs2 ws:= rs1 + rs2
2.减去:
2.减去:
SUB ws,rs1,rs2 ws:= rs1– rs2
3.反转(1‘s complement):
3.反转(1‘s complement):
INV ws, rs1 ws:=!rs1
4.逻辑左移:
4.逻辑左移:
LSL ws,rs1,rs2 ws:= rs1<< rs2
5.逻辑右移:
5.逻辑右移:
LSR ws,rs1,rs2 ws:= rs1>> rs2
6.按位与:
6.按位与:
与ws,rs1,rs2 ws:= rs1• rs2
7.按位或:
7.按位或:
或ws,rs1,rs2 ws:= rs1 | rs2
8.设置为小于:
SLT ws,rs1,rs2 ws:= 1(如果rs1)< rs2; ws:=0 if rs1 ≥ rs2
C.控制流程指令
1.平等分支:
BEQ rs1, rs2, offset
分支到(PC + 2 +(偏移<< 1)) when rs1 = rs2
2.分支不等于:
BNE rs1,rs2,偏移
分支到(PC + 2 +(偏移<< 1)) when rs1 != rs2
3.跳转:JMP偏移跳转到{PC [15:13],(偏移<< 1)}
8.设置为小于:
SLT ws,rs1,rs2 ws:= 1(如果rs1)< rs2; ws:=0 if rs1 ≥ rs2
C.控制流程指令
1.平等分支:
BEQ rs1, rs2, offset
分支到(PC + 2 +(偏移<< 1)) when rs1 = rs2
2.分支不等于:
BNE rs1,rs2,偏移
分支到(PC + 2 +(偏移<< 1)) when rs1 != rs2
3.跳转:JMP偏移跳转到{PC [15:13],(偏移<< 1)}
RISC的指令格式 处理器 :

处理器控制单元设计:
控制信号
| |||||||||
指令
|
注册
Dst
|
ALUSrc
|
门托
注册
|
注册
写
|
记忆读
|
m
写
|
科
|
铝
|
跳
|
数据处理
|
1
|
0
|
0
|
1
|
0
|
0
|
0
|
00
|
0
|
轻量级
|
0
|
1
|
1
|
1
|
1
|
0
|
0
|
10
|
0
|
西南
|
0
|
1
|
0
|
0
|
0
|
1
|
0
|
10
|
0
|
贝尼
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
01
|
0
|
J
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
00
|
1
|
ALU控制单元设计:
ALU控制
| ||||
铝
|
操作码(十六进制)
|
铝
|
ALU操作
|
指令
|
10
|
xxx
|
000
|
加
|
西南
|
01
|
xxx
|
001
|
潜艇
|
贝尼
|
00
|
0002
|
000
|
加
|
D型:ADD
|
00
|
0003
|
001
|
潜艇
|
D型:SUB
|
00
|
0004
|
010
|
倒置
|
D型:反转
|
00
|
0005
|
011
|
LSL
|
D型:LSL
|
00
|
0006
|
100
|
LSR
|
D型:LSR
|
00
|
0007
|
101
|
和
|
D型:与
|
00
|
0008
|
110
|
要么
|
D型:或
|
00
|
0009
|
111
|
SLT
|
D型:SLT
|
RISC处理器的Verilog代码:
1.的Verilog代码 指令存储器 :
`include "Parameter.v" // hzgifts.cn // FPGA projects, VHDL projects, Verilog projects // Verilog code for RISC Processor // Verilog code for 指令存储器 module 指令_Memory( input[15:0] pc, output[15:0] instruction ); reg [`col - 1:0] memory [`row_i - 1:0]; wire [3 : 0] rom_addr = pc[4 : 1]; initial begin $readmemb("./test/test.prog", memory,0,14); end assign instruction = memory[rom_addr]; endmodule
2.的Verilog代码 注册文件:
`timescale 1ns / 1ps // hzgifts.cn // FPGA projects, VHDL projects, Verilog projects // Verilog code for RISC Processor // Verilog code for 注册文件 module GPRs( input clk, // write port input reg_write_en, input [2:0] reg_write_dest, input [15:0] reg_write_data, //read port 1 input [2:0] reg_read_addr_1, output [15:0] reg_read_data_1, //read port 2 input [2:0] reg_read_addr_2, output [15:0] reg_read_data_2 ); reg [15:0] reg_array [7:0]; integer i; // write port //reg [2:0] i; initial begin for(i=0;i<8;i=i+1) reg_array[i] <= 16'd0; end always @ (posedge clk ) begin if(reg_write_en) begin reg_array[reg_write_dest] <= reg_write_data; end end assign reg_read_data_1 = reg_array[reg_read_addr_1]; assign reg_read_data_2 = reg_array[reg_read_addr_2]; endmodule
3.数据存储器的Verilog代码:
`include "Parameter.v" // hzgifts.cn // FPGA projects, VHDL projects, Verilog projects // Verilog code for RISC Processor // Verilog code for data mory module Data_Memory( input clk, // address input, shared by read and write port input [15:0] mem_access_addr, // write port input [15:0] mem_write_data, input mem_write_en, input mem_read, // read port output [15:0] mem_read_data ); reg [`col - 1:0] memory [`row_d - 1:0]; integer f; wire [2:0] ram_addr=mem_access_addr[2:0]; initial begin $readmemb("./test/test.data", memory); f = $fopen(`filename); $fmonitor(f, "time = %d\n", $time, "\tmemory[0] = %b\n", memory[0], "\tmemory[1] = %b\n", memory[1], "\tmemory[2] = %b\n", memory[2], "\tmemory[3] = %b\n", memory[3], "\tmemory[4] = %b\n", memory[4], "\tmemory[5] = %b\n", memory[5], "\tmemory[6] = %b\n", memory[6], "\tmemory[7] = %b\n", memory[7]); `simulation_time; $fclose(f); end always @(posedge clk) begin if (mem_write_en) memory[ram_addr] <= mem_write_data; end assign mem_read_data = (mem_read==1'b1) ? memory[ram_addr]: 16'd0;endmodule
4. ALU单元的Verilog代码:
// hzgifts.cn // FPGA projects, VHDL projects, Verilog projects // Verilog code for RISC Processor // Verilog code for ALU module ALU( input [15:0] a, //src1 input [15:0] b, //src2 input [2:0] alu_control, //function sel output reg [15:0] result, //result output zero ); always @(*) begin case(alu_control) 3'b000: result = a + b; // add 3'b001: result = a - b; // sub 3'b010: result = ~a; 3'b011: result = a<<b; 3'b100: result = a>>b; 3'b101: result = a & b; // and 3'b110: result = a | b; // or 3'b111: begin if (a<b) result = 16'd1; else result = 16'd0; end default:result = a + b; // add endcase end assign zero = (result==16'd0) ? 1'b1: 1'b0; endmodule
5. RISC处理器的ALU控制单元的Verilog代码:
`timescale 1ns / 1ps //hzgifts.cn: FPGA projects, Verilog projects, VHDL projects // Verilog code for 16-bit RISC 处理器 // ALU_Control Verilog code module alu_control( ALU_Cnt, 铝, Opcode); output reg[2:0] ALU_Cnt; input [1:0] 铝; input [3:0] Opcode; wire [5:0] ALUControlIn; assign ALUControlIn = {ALUOp,Opcode}; always @(ALUControlIn) casex (ALUControlIn) 6'b10xxx: ALU_Cnt=3'b000; 6'b01xxx: ALU_Cnt=3'b001; 6'b000010: ALU_Cnt=3'b000; 6'b000011: ALU_Cnt=3'b001; 6'b000100: ALU_Cnt=3'b010; 6'b000101: ALU_Cnt=3'b011; 6'b000110: ALU_Cnt=3'b100; 6'b000111: ALU_Cnt=3'b101; 6'b001000: ALU_Cnt=3'b110; 6'b001001: ALU_Cnt=3'b111; default: ALU_Cnt=3'b000; endcase endmodule
6. RISC处理器的数据路径的Verilog代码:
`timescale 1ns / 1ps // hzgifts.cn // FPGA projects, VHDL projects, Verilog projects // Verilog code for RISC Processor // Verilog code for Data Path of the 处理器 module Datapath_Unit( input clk, input jump,beq,mem_read,mem_write,alu_src,reg_dst,mem_to_reg,reg_write,bne, input[1:0] alu_op, output[3:0] opcode ); reg [15:0] pc_current; wire [15:0] pc_next,pc2; wire [15:0] instr; wire [2:0] reg_write_dest; wire [15:0] reg_write_data; wire [2:0] reg_read_addr_1; wire [15:0] reg_read_data_1; wire [2:0] reg_read_addr_2; wire [15:0] reg_read_data_2; wire [15:0] ext_im,read_data2; wire [2:0] ALU_Control; wire [15:0] ALU_out; wire zero_flag; wire [15:0] PC_j, PC_beq, PC_2beq,PC_2bne,PC_bne; wire beq_control; wire [12:0] jump_shift; wire [15:0] mem_read_data; // PC initial begin pc_current <= 16'd0; end always @(posedge clk) begin pc_current <= pc_next; end assign pc2 = pc_current + 16'd2; // instruction memory 指令_Memory im(.pc(pc_current),.instruction(instr)); // jump shift left 2 assign jump_shift = {instr[11:0],1'b0}; // multiplexer regdest assign reg_write_dest = (reg_dst==1'b1) ? instr[5:3] :instr[8:6]; // 注册文件 assign reg_read_addr_1 = instr[11:9]; assign reg_read_addr_2 = instr[8:6]; // GENERAL PURPOSE REGISTERs GPRs reg_file ( .clk(clk), .reg_write_en(reg_write), .reg_write_dest(reg_write_dest), .reg_write_data(reg_write_data), .reg_read_addr_1(reg_read_addr_1), .reg_read_data_1(reg_read_data_1), .reg_read_addr_2(reg_read_addr_2), .reg_read_data_2(reg_read_data_2) ); // immediate extend assign ext_im = {{10{instr[5]}},instr[5:0]}; // ALU control unit alu_control ALU_Control_unit(.ALUOp(alu_op),.Opcode(instr[15:12]),.ALU_Cnt(ALU_Control)); // multiplexer alu_src assign read_data2 = (alu_src==1'b1) ? ext_im : reg_read_data_2; // ALU ALU alu_unit(.a(reg_read_data_1),.b(read_data2),.alu_control(ALU_Control),.result(ALU_out),.zero(zero_flag)); // PC beq add assign PC_beq = pc2 + {ext_im[14:0],1'b0}; assign PC_bne = pc2 + {ext_im[14:0],1'b0}; // beq control assign beq_control = beq & zero_flag; assign bne_control = bne & (~zero_flag); // PC_beq assign PC_2beq = (beq_control==1'b1) ? PC_beq : pc2; // PC_bne assign PC_2bne = (bne_control==1'b1) ? PC_bne : PC_2beq; // PC_j assign PC_j = {pc2[15:13],jump_shift}; // PC_next assign pc_next = (jump == 1'b1) ? PC_j : PC_2bne; /// Data memory Data_Memory dm ( .clk(clk), .mem_access_addr(ALU_out), .mem_write_data(reg_read_data_2), .mem_write_en(mem_write), .mem_read(mem_read), .mem_read_data(mem_read_data) ); // write back assign reg_write_data = (mem_to_reg == 1'b1)? mem_read_data: ALU_out; // output to control unit assign opcode = instr[15:12]; endmodule
7. RISC处理器控制单元的Verilog代码:
`timescale 1ns / 1ps // hzgifts.cn // FPGA projects, VHDL projects, Verilog projects // Verilog code for RISC Processor // Verilog code for Control Unit module Control_Unit( input[3:0] opcode, output reg[1:0] alu_op, output reg jump,beq,bne,mem_read,mem_write,alu_src,reg_dst,mem_to_reg,reg_write ); always @(*) begin case(opcode) 4'b0000: // 轻量级 begin reg_dst = 1'b0; alu_src = 1'b1; mem_to_reg = 1'b1; reg_write = 1'b1; mem_read = 1'b1; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b10; jump = 1'b0; end 4'b0001: // 西南 begin reg_dst = 1'b0; alu_src = 1'b1; mem_to_reg = 1'b0; reg_write = 1'b0; mem_read = 1'b0; mem_write = 1'b1; beq = 1'b0; bne = 1'b0; alu_op = 2'b10; jump = 1'b0; end 4'b0010: // data_processing begin reg_dst = 1'b1; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b1; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b0; end 4'b0011: // data_processing begin reg_dst = 1'b1; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b1; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b0; end 4'b0100: // data_processing begin reg_dst = 1'b1; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b1; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b0; end 4'b0101: // data_processing begin reg_dst = 1'b1; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b1; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b0; end 4'b0110: // data_processing begin reg_dst = 1'b1; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b1; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b0; end 4'b0111: // data_processing begin reg_dst = 1'b1; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b1; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b0; end 4'b1000: // data_processing begin reg_dst = 1'b1; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b1; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b0; end 4'b1001: // data_processing begin reg_dst = 1'b1; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b1; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b0; end 4'b1011: // BEQ begin reg_dst = 1'b0; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b0; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b1; bne = 1'b0; alu_op = 2'b01; jump = 1'b0; end 4'b1100: // BNE begin reg_dst = 1'b0; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b0; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b1; alu_op = 2'b01; jump = 1'b0; end 4'b1101: // J begin reg_dst = 1'b0; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b0; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b1; end default: begin reg_dst = 1'b1; alu_src = 1'b0; mem_to_reg = 1'b0; reg_write = 1'b1; mem_read = 1'b0; mem_write = 1'b0; beq = 1'b0; bne = 1'b0; alu_op = 2'b00; jump = 1'b0; end endcase end endmodule
8. 16位RISC处理器的Verilog代码:
`timescale 1ns / 1ps // hzgifts.cn // FPGA projects, VHDL projects, Verilog projects // Verilog code for RISC Processor module Risc_16_bit( input clk ); wire jump,bne,beq,mem_read,mem_write,alu_src,reg_dst,mem_to_reg,reg_write; wire[1:0] alu_op; wire [3:0] opcode; // Datapath Datapath_Unit DU ( .clk(clk), .jump(jump), .beq(beq), .mem_read(mem_read), .mem_write(mem_write), .alu_src(alu_src), .reg_dst(reg_dst), .mem_to_reg(mem_to_reg), .reg_write(reg_write), .bne(bne), .alu_op(alu_op), .opcode(opcode) ); // control unit Control_Unit control ( .opcode(opcode), .reg_dst(reg_dst), .mem_to_reg(mem_to_reg), .alu_op(alu_op), .jump(jump), .bne(bne), .beq(beq), .mem_read(mem_read), .mem_write(mem_write), .alu_src(alu_src), .reg_write(reg_write) ); endmodule
9. 16位RISC处理器的Verilog Testbench代码:
`timescale 1ns / 1ps `include "Parameter.v" // hzgifts.cn // FPGA projects, VHDL projects, Verilog projects // Verilog code for RISC Processor // Verilog 测试bench code to 测试 the 处理器 module 测试_Risc_16_bit; // Inputs reg clk; // Instantiate the Unit Under Test (UUT) Risc_16_bit uut ( .clk(clk) ); initial begin clk <=0; `simulation_time; $finish; end always begin #5 clk = ~clk; end endmodule
参数文件:
`ifndef PARAMETER_H_ `define PARAMETER_H_ // hzgifts.cn // FPGA projects, VHDL projects, Verilog projects // Verilog code for RISC Processor // Parameter file `define col 16 // 16 bits instruction memory, data memory `define row_i 15 // instruction memory, instructions number, this number can be changed. Adding more instructions to verify your design is a good idea. `define row_d 8 // The number of data in data memory. We only use 8 data. Do not change this number. You can change the value of each data inside 测试.data file. Total number is fixed at 8. `define filename "./test/50001111_50001212.o" `define simulation_time #160 `endif
提供了16位RISC处理器所需的所有Verilog代码。现在,您只需要创建一个test.data(数据存储器的初始内容)和test.prog(指令存储器)。然后,运行仿真以查看该过程如何处理仿真波形和存储器文件。
指令存储器文件示例:
0000_0100_0000_0000 // load R0 <- m(R2 + 0) 0000_0100_0100_0001 // load R1 <- m(R2 + 1) 0010_0000_0101_0000 // Add R2 <- R0 + R1 0001_0010_1000_0000 // Store m(R1 + 0) <- R2 0011_0000_0101_0000 // sub R2 <- R0 - R1 0100_0000_0101_0000 // invert R2 <- !R0 0101_0000_0101_0000 // logical shift left R2 <- R0<<R1 0110_0000_0101_0000 // logical shift right R2 <- R0>>R1 0111_0000_0101_0000 // 和 R2<- R0 和 R1 1000_0000_0101_0000 // 要么 R2<- R0 要么 R1 1001_0000_0101_0000 // SLT R2 <- 1 if R0 < R1 0010_0000_0000_0000 // Add R0 <- R0 + R0 1011_0000_0100_0001 // BEQ branch to jump if R0=R1, PCnew= PC+2+offset<<1 = 28 => offset = 1 1100_0000_0100_0000 // BNE branch to jump if R0!=R1, PCnew= PC+2+offset<<1 = 28 => offset = 0 1101_0000_0000_0000 // J jump to the beginning address
示例数据存储文件:
0000_0000_0000_0001 0000_0000_0000_0010 0000_0000_0000_0001 0000_0000_0000_0010 0000_0000_0000_0001 0000_0000_0000_0010 0000_0000_0000_0001 0000_0000_0000_0010
您可能会这样:
VHDL中的MIPS处理器
用于16位单周期MIPS处理器的Verilog代码
Verilog中的32位5级流水线MIPS处理器(第1部分)
Verilog中的32位5级流水线MIPS处理器(第2部分)
Verilog中的32位5级流水线MIPS处理器(第3部分)
29。 复用器的Verilog代码
30岁 Verilog中的N位加法器设计
31。 Verilog和VHDL:通过示例解释
32。 FPGA上时钟分频器的Verilog代码
33。 如何在Verilog中生成时钟使能信号
34。 用于PWM发生器的Verilog代码
35岁 Verilog编码与软件编程
36。 Moore FSM序列检测器的Verilog代码
37。 Basys 3 FPGA上的7段显示控制器的Verilog代码
VHDL中的MIPS处理器
用于16位单周期MIPS处理器的Verilog代码
Verilog中的32位5级流水线MIPS处理器(第1部分)
Verilog中的32位5级流水线MIPS处理器(第2部分)
Verilog中的32位5级流水线MIPS处理器(第3部分)
推荐的 Verilog projects:
2. FIFO存储器的Verilog代码
3. 用于16位单周期MIPS处理器的Verilog代码
4. Verilog HDL中的可编程数字延迟计时器
5. 用于数字电路中基本逻辑组件的Verilog代码
6. 用于32位无符号除法器的Verilog代码
7. 用于定点矩阵乘法的Verilog代码
8. Verilog HDL中的车牌许可证识别
9. 提前进位乘法器的Verilog代码
10。 微处理器的Verilog代码
11。 4x4乘法器的Verilog代码
12 停车场系统的Verilog代码
13 使用Verilog HDL在FPGA上进行图像处理
14。 如何使用Verilog HDL将文本文件加载到FPGA中
15 交通信号灯控制器的Verilog代码
16。 FPGA上的闹钟的Verilog代码
17。 比较器设计的Verilog代码
18岁 D触发器的Verilog代码
19 Full Adder的Verilog代码
20 Verilog code for counter with 测试bench
21 16位RISC处理器的Verilog代码
22 用于在FPGA上反跳按钮的Verilog代码
23。 如何为双向/输入端口编写Verilog Testbench
3. 用于16位单周期MIPS处理器的Verilog代码
4. Verilog HDL中的可编程数字延迟计时器
5. 用于数字电路中基本逻辑组件的Verilog代码
6. 用于32位无符号除法器的Verilog代码
7. 用于定点矩阵乘法的Verilog代码
8. Verilog HDL中的车牌许可证识别
9. 提前进位乘法器的Verilog代码
10。 微处理器的Verilog代码
11。 4x4乘法器的Verilog代码
12 停车场系统的Verilog代码
13 使用Verilog HDL在FPGA上进行图像处理
14。 如何使用Verilog HDL将文本文件加载到FPGA中
15 交通信号灯控制器的Verilog代码
16。 FPGA上的闹钟的Verilog代码
17。 比较器设计的Verilog代码
18岁 D触发器的Verilog代码
19 Full Adder的Verilog代码
20 Verilog code for counter with 测试bench
21 16位RISC处理器的Verilog代码
22 用于在FPGA上反跳按钮的Verilog代码
23。 如何为双向/输入端口编写Verilog Testbench
24 Verilog和LogiSim中的Tic Tac Toe游戏
25岁 Verilog中的32位5级流水线MIPS处理器(第1部分)
26 Verilog中的32位5级流水线MIPS处理器(第2部分)
27。 Verilog中的32位5级流水线MIPS处理器(第3部分)
28。 解码器的Verilog代码25岁 Verilog中的32位5级流水线MIPS处理器(第1部分)
26 Verilog中的32位5级流水线MIPS处理器(第2部分)
27。 Verilog中的32位5级流水线MIPS处理器(第3部分)
29。 复用器的Verilog代码
30岁 Verilog中的N位加法器设计
31。 Verilog和VHDL:通过示例解释
32。 FPGA上时钟分频器的Verilog代码
33。 如何在Verilog中生成时钟使能信号
34。 用于PWM发生器的Verilog代码
35岁 Verilog编码与软件编程
36。 Moore FSM序列检测器的Verilog代码
37。 Basys 3 FPGA上的7段显示控制器的Verilog代码
ALU_Control_unit模块丢失!
回复删除更新。谢谢。
删除数据路径中仍然缺少对ALU和ALU控件的描述。
回复删除检查给定的表以了解ALU和ALU控制单元的功能。
回复删除使其像spartan一样在fpga模块上发挥作用,请您引起注意
回复删除can yo just explain about the 测试.prog and 测试.data ,where should we create it and also about the .o file.
回复删除提前致谢。
这些文件已在上面给出。只需使用相同的名称创建文件,然后将内容复制到这些文件中即可。
删除你能给我发这个代码吗
回复删除我的邮件是
[email protected]
您可以发送8位RISC处理器代码吗?
回复删除Thank you for the above code. I 测试ed it , works perfectly. I got an overview now. Thanks again.
回复删除很高兴听你这样说。您're welcome.
删除您能发送代码吗,因为我已经测试过,并且显示了一些错误,我使用的工具是xilinx 14。3版本,但仍然没有显示输出
删除how to create a 测试.data (Initial content of data memory) and 测试.prog (Intruction memory).
回复删除对于指令存储器,您需要将指令转换为机器代码。然后,将数据放入指令存储器。有2个给定的示例文件,用于存储数据和指令。您可以参考它。
删除我没有得到输出,您能告诉我如何准确执行它吗
回复删除检查寄存器和存储器内容以进行验证,或者将其中一些作为输出以在仿真波形上查看
删除您能为每个模块提供FSM吗?
回复删除谢谢你的帖子
回复删除您能给我发送带有32条指令的5stage管道64位Risc处理器的代码吗
回复删除How to create 测试.data and 测试.prog files and where should we create it?
回复删除它们应该是文本文件吗?
我是Verilog的新手,使用Quartus II进行仿真。在test.prog中遇到语法错误,但是我没有'弄明白错误在哪里。我已经复制了给定的示例,并将其保存为test.prog。
回复删除在vivado中的实现表示该设计是空的。怎么解决呢?
回复删除您能解释一下rs1,rs2和ws的缩写吗
回复删除先生,您能告诉我您使用的是哪个模拟器吗?我尝试了xilinx vivado ...,但是我不知道在哪里检查该.data和.prog文件的输出。
回复删除它可以用于任何Verilog模拟器。您需要在以下位置创建.data + .prog文件'test'项目文件夹中的文件夹。
删除您能解释一下为什么在指令存储部分中
回复删除线[3:0] rom_addr = pc [4:1];
您尚未分配pc [3:0]?为什么您在分配时忽略了第0位PC?
每个指令/内存数据宽度为16位或2个字节。 PC数为2。's为什么仅使用PC [4:1]从ROM中提取指令。
删除