1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xiaowuzxc-Yduck-processor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
YD_int.v 3.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
xiaowuzxc Отправлено 3 лет назад 8e13847
module YD_int
(
input wire clk, //时钟
input wire rst, //同步复位,高电平有效
//int
input wire int_vld, //中断脉冲输入,1周期高脉冲表示中断发生
output reg int_rdy, //数据输出,高电平可以接受中断,低电平无法响应
//
input wire[15:0]PC, //下一条指令的地址
input wire jpc, //跳转指示
output reg int_jpc, //输出的跳转指示
output reg inp,//插入NOP指示,异步作用
//接管寄存器组写端口
//输入口0
input wire [15:0]din0,
input wire [3:0]waddr0,
input wire we0,
//输入口1
input wire [15:0]din1,
input wire [3:0]waddr1,
input wire we1,
//输入口0
output reg [15:0]int_din0,
output reg [3:0]int_waddr0,
output reg int_we0,
//输入口1
output reg [15:0]int_din1,
output reg [3:0]int_waddr1,
output reg int_we1
);
/*
非向量中断控制器
无中断,int_rdy=1,寄存器端口旁路
发生中断
0:int_vld=1,PC暂存,int_rdy=0
1:inp=1,插入NOP
2:接管寄存器端口,PC-r->RC,16'h0004->PC
3:NOP
4:inp=0,int_rdy=1
*/
//有限序列机
reg [2:0]state;//状态寄存器
reg sen;//序列机工作使能
localparam IDLE=3'h0;//等待状态
localparam CPL=3'h1;//清空流水线
localparam WBK=3'h2;//写返回地址,PC跳转
localparam RIN=3'h3;//指令读出前,插NOP
localparam IED=3'h4;//结束,复位控制器
//寄存器
reg [15:0]PC_r;
//状态转移控制
always @(posedge clk) begin
if(rst) begin
sen <= 1'b0;
state <= 3'h0;
end
else begin
if(int_vld) begin//中断脉冲
sen <= 1'b1;//启动序列机
state <= CPL;//直接转移到CPL
PC_r <= PC;
end
if(sen)//中断启动
if(state<IED)//到达结束状态前
state <= state+1;//进入下一个状态
else begin//到达最终状态
state <= IDLE;//复位
sen <= 1'b0;
end
else//多余状态复位
if(state!=IDLE)
state <= IDLE;
end
end
//输出控制,组合逻辑部分
always @(*) begin
if(rst) begin
//寄存器端口旁路
int_din0=din0;
int_waddr0=waddr0;
int_we0=we0;
int_din1=din1;
int_waddr1=waddr1;
int_we1=we1;
//可中断
int_rdy=1;
//插入空指令
inp=0;
//jpc
int_jpc=jpc;
end
else begin
case (state)
IDLE: begin//等待状态
//寄存器端口旁路
int_din0=din0;
int_waddr0=waddr0;
int_we0=we0;
int_din1=din1;
int_waddr1=waddr1;
int_we1=we1;
//可中断
int_rdy=1;
//插入空指令
inp=0;
//jpc
int_jpc=jpc;
end
CPL: begin//清空流水线
//寄存器端口旁路
int_din0=din0;
int_waddr0=waddr0;
int_we0=we0;
int_din1=din1;
int_waddr1=waddr1;
int_we1=we1;
//中断进行中
int_rdy=0;
//插入空指令
inp=1;
//jpc
int_jpc=jpc;
end
WBK: begin//写返回地址,PC跳转
//寄存器端口旁路
int_din0=PC_r;//写返回地址
int_waddr0=4'b1110;
int_we0=1;
int_din1=16'h0004;//PC跳转
int_waddr1=4'b1111;
int_we1=1;
//中断进行中
int_rdy=0;
//插入空指令
inp=1;
//jpc
int_jpc=1;
end
RIN: begin//指令读出前,插NOP
//寄存器端口旁路
int_din0=din0;
int_waddr0=waddr0;
int_we0=we0;
int_din1=din1;
int_waddr1=waddr1;
int_we1=we1;
//中断进行中
int_rdy=0;
//插入空指令
inp=1;
//jpc
int_jpc=jpc;
end
IED: begin//结束,复位控制器
//寄存器端口旁路
int_din0=din0;
int_waddr0=waddr0;
int_we0=we0;
int_din1=din1;
int_waddr1=waddr1;
int_we1=we1;
//中断进行中
int_rdy=0;
//插入空指令
inp=0;
//jpc
int_jpc=jpc;
end
default: begin
//寄存器端口旁路
int_din0=din0;
int_waddr0=waddr0;
int_we0=we0;
int_din1=din1;
int_waddr1=waddr1;
int_we1=we1;
//可中断
int_rdy=1;
//插入空指令
inp=0;
//jpc
int_jpc=jpc;
end
endcase
end
end
endmodule

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/xiaowuzxc-Yduck-processor.git
git@gitlife.ru:oschina-mirror/xiaowuzxc-Yduck-processor.git
oschina-mirror
xiaowuzxc-Yduck-processor
xiaowuzxc-Yduck-processor
master