EDA课程设计.doc

上传人:b****9 文档编号:141052 上传时间:2022-10-04 格式:DOC 页数:9 大小:97.50KB
下载 相关 举报
EDA课程设计.doc_第1页
第1页 / 共9页
EDA课程设计.doc_第2页
第2页 / 共9页
EDA课程设计.doc_第3页
第3页 / 共9页
EDA课程设计.doc_第4页
第4页 / 共9页
EDA课程设计.doc_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

EDA课程设计.doc

《EDA课程设计.doc》由会员分享,可在线阅读,更多相关《EDA课程设计.doc(9页珍藏版)》请在冰豆网上搜索。

EDA课程设计.doc

E

D

A

信息与计算机工程学院

电子信息专业3班

安吉旺20082966

一.设计要求

消除本设计中的PC模块,代之以存储器中的mem[20],也就是mem[20]就是pc(这样做的好处是pc这时候变成了可寻址单元,(可以直接修改pc实现程序的绝对跳转)。

另外,将冯·诺依曼(vonNeuman)的体系结构改成哈佛结构,将编写机器码并且给出仿真波形。

二.结构说明

冯·诺依曼(vonNeuman)的体系结构,将指令、数据、地址存储在同一存储器中,统一编址,依靠指令计数器提供的地址来区分是指令、数据还是地址。

取指令和取数据都访问同一存储器。

而哈佛结构是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。

三.程序代码

1.控制器代码

modulecontrol(

inputclock,

inputreset,

outputregs0,//fetchinstruction

outputregs1,//decode

outputregs2,//readmemorydataforprocess

outputregs3,//enablealutocompute

outputregs4,//writetomemoryifnessary

outputregs5,//increasepc

//outputregaddrsel,

outputreginstr_add,

outputreginstr_sub,

outputreginstr_and,

outputreginstr_pass,

input[2:

0]opcode);

parameter LDA=3'b000,STA=3'b001,ADD=3'b010,

SUB=3'b011,AND=3'b100,HLT=3'b101;

//JMP=3'b110,JZF=3'b111;

reg[2:

0]cnt;

always@(posedgeclockorposedgereset)

if(reset)

cnt<=0;

else

if(cnt==5)

cnt<=0;

else

cnt<=cnt+1;

always@*

begin

case(cnt)

0:

begin//fetchinstruction

s0<=1;s1<=0;s2<=0;s3<=0;s4<=0;s5<=0;

//addrsel<=0;

end

1:

begin//decode

s0<=0;s1<=1;s2<=0;s3<=0;s4<=0;s5<=0;

//addrsel<=0;

end

2:

begin//readmemorydataforprocessifnessary

s0<=0;s1<=0;/*s2=1;*/s3<=0;s4<=0;s5<=0;

//addrsel<=1;

if((opcode==LDA)||(opcode==ADD)||(opcode==SUB)||(opcode==AND))

s2<=1;

else

s2<=0;

end

3:

begin//enableALUtocompute

s0<=0;s1<=0;s2<=0;s3<=1;s4<=0;s5<=0;

//addrsel<=1;

if(opcode==LDA)begininstr_add<=0;

instr_sub<=0;

instr_and<=0;

instr_pass<=1;

end

elseif(opcode==ADD)begininstr_add<=1;

instr_sub<=0;

instr_and<=0;

instr_pass<=0;

end

elseif(opcode==SUB)begininstr_add<=0;

instr_sub<=1;

instr_and<=0;

instr_pass<=0;

end

elseif(opcode==AND)begininstr_add<=0;

instr_sub<=0;

instr_and<=1;

instr_pass<=0;

end

elseif(opcode==STA)begininstr_add<=0;

instr_sub<=0;

instr_and<=0;

instr_pass<=0;

end

elsebegininstr_add<=0;

instr_sub<=0;

instr_and<=0;

instr_pass<=0;

end

end

4:

begin//writetomemoryifnessary

s0<=0;s1<=0;s2<=0;s3<=0;/*s4<=1;*/s5<=0;

//addrsel<=1;

if(opcode==STA)s4<=1;

elses4<=0;

end

5:

begins0<=0;s1<=0;s2<=0;s3<=0;s4<=0;s5<=1;

//addrsel<=1;

end

endcase

end

endmodule

2.存储器代码

(1)modulememory(clock,reset,addr,din,dout,rd,wr,IN,OUT,pc,pc_en);

inputclock,reset;

inputpc_en;

input[7:

0]din;

input[4:

0]addr;

outputreg[7:

0]dout;

inputrd,wr;

input[7:

0]IN;

outputreg[7:

0]OUT;

output[4:

0]pc;

wire[7:

0]pc_next;

assignpc_next=mem[20];

//reg[7:

0]mem[31:

0];

reg[7:

0]mem[30:

0];

always@(posedgeclockorposedgereset)

if(reset)begin

mem[0]<='b1;//00001011;//LDA11

mem[1]<='b1;//01001100;//ADD12

mem[2]<='b1;//00101101;//STA13

// mem[3]<='b00001011;//LDA11

mem[3]<='b1;//00011111;//LDA31

mem[4]<='b1;//10001100;//AND12

// mem[5]<='b00101110;//STA14

mem[5]<='b1;//00111111;//STA31

mem[6]<='b1;//00001011;//LDA11

mem[7]<='b1;//01101100;//SUB12

// mem[8]<='b00101111;//STA15

mem[8]<='b1;//00110100;//stapc

mem[9]<='b1;//10100000;//HLT

mem[10]<='b1;

mem[11]<='b10101010;

mem[12]<='b01010101;

mem[13]<='b1;

mem[14]<='b1;

mem[15]<='b1;

mem[16]<='b1;

mem[17]<='b1;

mem[18]<='b1;

mem[19]<='b1;

mem[20]<='b0;

mem[21]<='b00001011;

mem[22]<='b01001100;

mem[23]<='b00101101;

mem[24]<='b1;

mem[25]<='b1;

mem[2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1