verilog hdl 贺敬凯写的,有没有什么好点的教案啊,,有的话发给我
发布网友
发布时间:2022-04-26 09:02
我来回答
共1个回答
热心网友
时间:2023-10-09 03:25
基于FPGA的专用CPU的设计
摘要:简要介绍了专用CPU的组成及其工作原理,给出了基于Altera公司的FPGA实现专用CPU的设计过程和电路结构。设计在QuartusII软件中完成,并给出了仿真波形。该设计用FPGA实现,因此有许多优点,可以灵活地地扩展或修改ALU、寄存器文件等,可以很方便地转变为其他专用CPU。
关键词:专用处理器; 数据路径; 控制器
Design of Application specific processor Based on FPGA
Abstract:This article simply introced the structure and the work principle of Application specific processor,then brought forward the designed process and electric circuit structure of Application specific processor. The design and simulation is completed in the environment of QuartusII software. The design is implemented with FPGA, so it has many advantages, such as flexible ALU, register file, etc. .
Keywords: Application specific processor; data path; controller
1 引言
处理器是计算机中的重要部分,也是嵌入式系统中必不可少的部分。随处理问题的不同,处理器有着不同的定制化程度,据此可将处理器分类三类[1]:通用处理器、单用途处理器和专用处理器。这三类处理器在NRE费用、上市时间、功耗和性能等方面有着巨大的差异,这也是嵌入式系统设计者在三种处理器之间作选择出的依据,三类处理器之间的差异可参阅文献[1]。虽然三类处理器有着各自的特点,但在具体设计实现方面,这三类处理器则大同小异。
在现代电子设计中,采用FPGA来实现数字系统具有很高的性价比,设计参数和设计指标的调整也比较灵活,因此在电子设计中逐渐为大家所采用[2~3]。同时,嵌入式系统日新月益,其中很重要的一个方面是广泛采用专用处理器,这主要是因为一方面专用处理器具有针对性,针对应用作了优化,功耗和性能有显著提高,另一方面也可以推出具有自主知识产权的产品,领先竞争对手。有鉴于此,本文尝试采用FPGA来实现能够完成某特定功能的专用处理器,以此说明专用处理器的设计方法。
2 专用处理器结构
专用处理器是一个可编程处理器,针对某一特定类型的应用进行了优化。这些特定类型的应用具有共同的特点,例如嵌入式控制、数字信号处理等,典型的专用处理器有单片机、数字信号处理器等。在专用处理器的设计过程中,设计者可针对现实中的应用对通用处理器的数据路径进行优化,可能是增加专门的功能单元执行常用运算以及删除不常用的其他功能单元。专用处理器的结构如图1所示。
图1 专用处理器结构
Fig.1 Structure of Application specific processor
图中,数据路径可针对特定的应用进行定制,寄存器可以增加,并且寄存器允许在一个指令内把一个寄存器内容与某一存储器位置相加,以减少寄存器数量,简化控制器。
3 专用处理器设计方案
3.1 专用处理器可完成的功能
要求本专用处理器可完成自然数的相加功能。例如完成:0+1+2+…+10=?。算法用C语言可表示为:
int total = 0;
for (int i=10; i!=0; i--)
total += i;
// next instructions...
3.2 功能的实现
为了设计专用处理器,对可应用于该专用处理器的指令集作出约定是非常必要的。针对累加功能,可以约定下面的一个简单的指令集。
图2 简单指令集
Fig.2 Simple instruction set
从该指令集我们可以看出该专用处理器的一些结构特点:比如,在寄存器文件*有4个寄存器,立即数最多为4位二进制数等等。当然,可以根据专用处理器的功能要求修改指令集。在对图2的指令集作出约定后,我们就可以用汇编语言来描述算法,汇编语言代码如下:
// 0 MOV R0,#0; //total=0
// 1 MOV R1,#10; //i=10
// 2 MOV R2,#1; //常数1
// 3 MOV R3,#0; //常数0
// Loop: JZ R1,NEXT; //如果i=0,则完成
// 5 ADD R0,R1; //total+=i
// 6 SUB R1,R2; //i--
// 7 JZ R3,Loop //不为零则跳转
// NEXT: HALT //停在这里
在此基础上可以方便地将求和算法转换为机器码并存放在程序存储器中,如下所示:
PM [0] = 10'b0011_00_0000; //MOV R0,#0;
PM [1] = 10'b0011_01_1010; //MOV R1,#10;
PM [2] = 10'b0011_10_0001; //MOV R2,#1;
PM [3] = 10'b0011_11_0000; //MOV R3,#0;
PM [4] = 10'b0110_01_1000; // JZ R1,NEXT;
PM [5] = 10'b0100_00_0100; //ADD R0,R1;
PM [6] = 10'b0101_01_1000; //SUB R1,R2;
PM [7] = 10'b0110_11_0100; //JZ R3,Loop
PM [8] = 10'b1111_00_1111; //halt
显然,程序存储器的字长取为10bit较为合适。目前市面上常见的存储器的字长为8位、16位、32位或64位。当然,我们的设计可以很方便地根据需要将每条指令的机器码扩展为16bit。
3.3 系统设计方案
本系统主要由控制器和数据路径两大部分构成。由于本设计涉及的程序代码较少,故本设计将程序代码存放在了控制器内部的一个数组中,而没有单独设计一个程序存储器。事实上,可以很容易地单独设立一个程序存储器,并在控制器中增加读取程序存储器的操作,这部分原理清晰,实现容易,感兴趣的读者可自行设计。
图3 系统设计原理框图
Fig.3 Principle of the system design
4 专用处理器的设计实现
4.1 专用处理器的设计实现
根据图3的原理,在QuartusII软件中实现该设计,整个专用处理器的设计结构框图如图4所示。整个处理器分为控制器和数据路径两部分,两个部分的工作时钟设计为两个同频不同相的时钟。
图4 专用处理器实现框图
Fig.4 Implementation of Application specific processor
图4中控制器中的状态机的设计无疑是最重要也是最容易出错的地方。由于控制器的代码较长,这里仅摘录用于加法部分的状态机,代码使用Verilog HDL语言书写。
case(state)
s0: //-- steady state
begin
PC = 0;
if(start == 1'b1)
state <= s1;
else
state <= s0;
end
s1: //-- fetch instruction
begin
IR = PM[PC];
OPCODE = IR[9:6];
register=IR[5:4];
address= IR[3:0];
state <= s2;
end
s2://-- increment PC
begin
PC = PC + 1;
state <= s4;
end
s4://-- decode instruction
begin
case(OPCODE)
add:
state <= s6;
…
…
halt:
state <= done;
default:
state <= s1;
endcase
end
s6:
begin //-- add
sel_rf=IR[3:2];
en_rf=1;
r_wf=1;
state <= s6_2;
end
s6_2:
begin
en_reg=1;
state <= s6_3;
end
s6_3:
begin
sel_rf=register;
en_rf=1;
r_wf=1;
state <= s6_4;
end
s6_4:
begin
en_alu=1;
sel_alu=2'b10;
state <= s6_5;
end
s6_5:
begin
sel_rf=register;
en_rf=1;
r_wf=0;
state <= s9;
end
s9: //-- go back for next instruction
state <= s1;
done: //-- stay here forever
state <= done;
在图4中,又对数据路径部分进行了细分,主要包括ALU和REGISTER FILE两部分,细分框图如图5所示。
图5 数据路径部分实现框图
Fig.5 Implementation of the datapath
由图5可以看出,数据路径部分包括二选一数据选择器、寄存器、寄存器文件、ALU等部分。这些部分的时钟为同一个时钟。
上述的设计具有很大的灵活性,可以根据不同的实际应用情况来修改参数。例如,对于寄存器文件中的寄存器数目,可以根据实际的情况增减;对于ALU中进行的计算,也可以根据实际情况进行增减,等等。
4.2 仿真验证
仿真时,取CLK的时钟周期为10ns,也就是工作时钟为100MHz。将寄存器文件中的寄存器选择信号连接至seclect,将存入寄存器中数据的端口连接至resister_in,将这些信号连同程序计数器PC和状态机信号作为待观察信号,如仿真窗口所示。仿真波形如图6所示。从图中可以看出,该专用处理器完成了累加的功能,累加的结果为55。该仿真结果表明该设计是正确的。
图6 仿真波形
Fig.6 simulation waveform
我们也可以将该设计引脚锁定,建立SignalTap文件,引出相应的引脚,然后将设计编译下载到硬件FPGA板中,通过逻辑分析仪观察。硬件的验证结果同以上仿真结果,这同样可以说明设计是正确的。
5 结束语
越来越多的专用处理器应用于嵌入式系统中,这对嵌入式系统的应用和发展起到了很大的推动作用。本文完成了一个功能简单的专用处理器的设计,该设计用FPGA实现,因此具有很高的灵活性。该设计可以看作是一个专用处理器的原型产品,我们可以在此基础上增加元器件,比如可以在寄存器文件模块中增加更多的特定功能寄存器,也可以在ALU中完成更多的算术逻辑功能,如移位、计数等功能,这样就可以形成一个功能更强大的专用处理器,甚至可以构建一个通用处理器。
参考文献(References)
[1] [美]Frank vahid, Tony Givargis著, 骆丽译. 嵌入式系统设计[M]. 北京航空航天大学出版社,2004年第一版
Frank vahid, Tony Givargis. Embedded system design[M]. Beihang University Press, 2004(in Chinese)
[2] 贺敬凯. 基于FPGA的信号发生器的设计 [J]. 深圳信息职业技术学院学报, 2008年02期
He Jingkai. Signal Generator Design Based on FPGA [J]. Journal of Shenzhen Institute of Information Technology, 2008,No.2
[3] 潘松,黄继业. EDA技术与VHDL[M]. 清华大学出版社,2007年第二版
PAN Song, HUANG Jiye. EDA technology and VHDL[M]. Tsinghua University Press, 2007(in Chinese)
兄弟 你找的是不是这