一、06-Minisys-1单周期CPU控制器的设计(1)
1.主要内容:
- 创建一个项目
- 单周期CPU控制器设计
项目初始文件http://www.njyangqs.com/soc/download/
2.创建一个项目
- 先确保初始文件包已安装在C盘的minisys1_classfiles目录下
- 打开vivado(2015.4),创建新项目,在C盘minisys1下
- 添加source files时,C盘-minisys1_classfiles-minisys,勾选copy。
4. 添加约束文件,xdc文件夹,勾上copy。
- 选择器件,Artix-7家族,fgg484封装,-1速度,选最下面的器件。
- 所有.v文件都不完整,需要补充完整
// ifetc32.v
`timescale 1ns / 1ps
//
module Ifetc32(Instruction,PC_plus_4_out,Add_result,Read_data_1,Branch,nBranch,Jmp,Jal,Jrn,Zero,clock,reset,opcplus4);
output[31:0] Instruction; // 输出指令
output[31:0] PC_plus_4_out;
input[31:0] Add_result;
input[31:0] Read_data_1;
input Branch;
input nBranch;
input Jmp;
input Jal;
input Jrn;
input Zero;
input clock,reset;
output[31:0] opcplus4;
wire[31:0] PC_plus_4;
reg[31:0] PC;
reg[31:0] next_PC;
wire[31:0] Jpadr;
reg[31:0] opcplus4;
//分配64KB ROM,编译器实际只用 64KB ROM
prgrom instmem(
.clka(clock), // input wire clka
.addra(PC[15:2]), // input wire [13 : 0] addra
.douta(Jpadr) // output wire [31 : 0] douta
);
assign Instruction = Jpadr; // 取出指令
always @* begin // beq $n ,$m if $n=$m branch bne if $n /=$m branch jr
end
always @(negedge clock) begin
end
endmodule
// idecode32.v
`timescale 1ns / 1ps
//
module Idecode32(read_data_1,read_data_2,Instruction,read_data,ALU_result,
Jal,RegWrite,MemtoReg,RegDst,Sign_extend,clock,reset,
opcplus4,read_register_1_address);
output[31:0] read_data_1;
output[31:0] read_data_2;
input[31:0] Instruction;
input[31:0] read_data; // 从DATA RAM or I/O port取出的数据
input[31:0] ALU_result; // 需要扩展立即数到32位
input Jal;
input RegWrite;
input MemorIOtoReg;
input RegDst;
output[31:0] Sign_extend;
input clock,reset;
input[31:0] opcplus4; // 来自取指单元,JAL中用
output[4:0] read_register_1_address;
wire[31:0] read_data_1;
wire[31:0] read_data_2