320 likes | 519 Views
天津大学计算机学院 郭炜 weiguo@tju.edu.cn 25 楼 B 座 503 室. 计算机设计与调试. 目标. 在学习完计算机组成原理、接口电路、硬件设计语言之后,自己设计一个简单的“计算机”,进而加深对相关课程的理解,掌握设计方法,熟悉相关设计工具。. 课程任务. 模块设计 采用 Verilog HDL ,设计 PowerPC 协处理器 AltiVec 模块中部分 VSFX 指令。 两人一组,每组 5 条。 顶层模块集成 将设计的 VSFX 指令模块与其他模块集成 看懂模块与模块之间的关系 仿真验证
E N D
天津大学计算机学院 郭炜 weiguo@tju.edu.cn 25楼B座 503室 计算机设计与调试
目标 • 在学习完计算机组成原理、接口电路、硬件设计语言之后,自己设计一个简单的“计算机”,进而加深对相关课程的理解,掌握设计方法,熟悉相关设计工具。
课程任务 • 模块设计 • 采用Verilog HDL,设计PowerPC协处理器AltiVec模块中部分VSFX指令。 • 两人一组,每组5条。 • 顶层模块集成 • 将设计的VSFX指令模块与其他模块集成 • 看懂模块与模块之间的关系 • 仿真验证 • 用Altivec汇编指令编写测试程序,通过汇编器生成机器码。 • 在集成环境下,仿真验证设计的正确性。
PowerPC405 核+协处理器 • APU: 接口 • FCM:协处理器 • 我们要做的是一 款协处理器 • AltiVec
PowerPC AltiVec指令集介绍 • Vector extension to the PowerPC processors • 功能: • 数据位宽为128 ,支持4向量运算 • 156条指令, Altivec指令集列表.xls • 指令定义,Power ISA 文件:PowerISA_V2.06B_V2_PUBLIC.pdf, Book-I Chapter 6. Vector Facility [Category: Vector] • 指令解释,AltiVec Technology Programming Interface Manual • 文件:ALTIVECPCM.pdf
Vadduhm在“AltiVec Technology Programming Interface Manual ”中的解释
Vector simple fixed-point unit(VSFX) Except for vector multiply and sum across instructions, the VSFX implements all integer instructions as defined by the AltiVec technology. In addition, it implements the vector floating-point compare and vector minimum/maximum floating-point instructions because these instructions can use the same dataflow as used for their vector integer counterparts. All instructions execute in the VSFX in a single cycle.
VSFX指令及设计任务 • 70条Vector simple pixed-point instructions • Integer: add,sub,average,maximum, minimum,compare, logic, rotateandshift • Floating-point: compare, maximum, minimum • 文档 Altivec指令集列表.xls 中,红色标注的指令类。 • 设计任务:两人一组。每组在一大类指令(如add类)中按组号顺序选1条指令,共实现5大类(如add,sub,average,maximum, compare ),即一共实现5条不同类型的指令。保证每组实现的代码不同。
Altivec 设计参考文献: • A_low-power__high-speed_implementation_of_a_PowerPC_microprocessor_vector_extension.pdf
VSFX 模块与顶层的连接信号 • 信号定义:vsfx信号说明.v
指令译码器输出信号ins[6:0] • There are total 70 instructions for vsfx module. The 7-bit address signals, ins[6:0], from the first level decoder are corresponding to the 70 instructions. • 文件 vsfx_instruction_1st_level_decoder.doc
第一次作业 • 两人一组,自愿组合。 • 阅读指令定义文档 • PowerISA_V2.06B_V2_PUBLIC.pdf (Book-I Chapter 6. Vector Facility [Category: Vector] ) • 每组选出5条要硬件实现的指令。要求跟其他组不同。先互相问一下。 • 一周后,以小组的形式提交组员姓名及选取的指令 Email to weiguo@tju.edu.cn
第二次作业 • 任务:Presentation • 以小组为单位,介绍小组要实现的指令的功能 • 目的:让大家对整个Altivec指令有一个较全面的了解 • 时间:3月18日 • ppt提交时间:3月16号 • Email to:weiguo@tju.edu.cn
第三次作业 • 任务: • 采用C语言,完成所要设计的5条指令的功能。 • 准备硬件设计的测试向量(golden pattern) • 目的:明确要实现的功能,准备硬件设计的测试向量。 • 程序提交时间:4月1号 • 提交纸质版
第四次作业 • 任务: • 根据altivec的top level RTL代码(没有VSFX模块、 VCFX模块及 VFPU模块, AltiVecUnit.v),画出altivec top level的模块框图。 • 不需要标注信号名称,但需将RTL代码的文件名标注在所画出的top level架构上,包括你要设计的模块。 • 根据一级译码电路设计及文件 vsfx_instruction_1st_level_decoder.doc,列出你所要实现的5条特定指令对应的地址信号(准备二级译码电路设计)。 • 搞明白你要设计的那个模块的每一个信号的来源及意义 • 如:input vra, vrb是从哪里来的?他们与指令addsbs vrt,vra,vrb 中的vra, vrb的区别?
第四次作业 - 续 • 任务:续 • 定义你要设计的VSFX模块的架构 • 考虑低功耗设计,模块复用等。 • 在VSFX模块的框图中,标出其中每个子模块的文件名。标注寄存器及多路选择器的位置。标注输入输出信号的名字,包括子模块的信号名字。 • 做ppt,每组3-5分钟介绍。 • 目的:架构设计是设计步骤中的关键一步。也就是编写RTL代码前,一定要先写“设计文档”。事半功倍。 • 提交时间:4月14日中午12点之前 Email to weiguo@tju.edu.cn • Presentation时间:4月15号
第五次作业 • 任务:VSFX模块的RTL代码设计及仿真验证。 • 完成二级译码电路设计 • 完成功能模块设计 • 目的: • 熟练熟练掌握计算机核心部件的硬件设计方法与实现语言-Verilog • 熟练掌握RTL代码仿真工具的使用 • 实验提交时间: • 5月6日之前,email to weiguo@tju.edu.cn • 实验提交内容:RTL代码、testbench及仿真波形(用C代码产生的的测试向量进行测试的结果)。 • 5月6日带RTL代码、testbench去413实验室,演示及答疑,完成实验。
条件操作符 条件操作符根据条件表达式的值选择相应的表达式,形式如下: 条件表达式?表达式1:表达式2; 其执行过程是首先对条件表达式进行判断,如果其为真(即值为1),选择表达式1,否则选择表达式2。
条件操作符例子:总线选择电路 module sel4_1(bus_a,bus_b,bus_c,bus_d,sel, dout); input [3:0] bus_a; input [3:0] bus_b; input [3:0] bus_c; input [3:0] bus_d; input [1:0] sel; output [3:0] dout; assign dout= (sel==2’b00)?bus_a: sel==2’b01 ? bus_b: sel==2’b10 ? bus_c:bus_d; Endmodule 这里首先判断(sel==2’b00)是否成立, 如果成立那么dout就等于bus_a; 否则判断(sel==2’b01)是否成立, 如果成立那么dout就等于bus_b,依次类推。
优先级别 !(逻辑非)、~(按位取反) *(乘法)、/(除法)、%(取模或求余) +(加法)、-(减法) <<(向左移位)、>>(向右移位) = =(逻辑相等)、!=(逻辑不等)、===(全等)、!==(非全等) &(按位与) ^(按位异或)、^~(按位异或非) |(按位或) &&(逻辑与) ||(逻辑或) ?:(条件操作符) 高优先级 低优先级 操作符的优先级
并位操作的例子 Verilog中的并位操作符可以把两个或多个信号的某些位拼接起来后作为一个整体进行运算操作。并位操作符为“{}”。 例子: … wire [15:0] data; reg [9:0] addr; wire csn, ale,wen; wire [18:0] interface; assign interface={data[7:0],addr[7:0],csn,ale,wen}; …
指令实现例子 注:数据准备时,如果是负数,将转为补码。计算时,不再考虑是否是负数。 结果也是补码。只有当应用需要时,才判断是正数还是负数,并作相应处理。
以32位数字为例 //vector add signed byte saturate module vaddsbs(vra,vrb,vrt,sat); input [31 : 0] vra; input [31 : 0] vrb; output [31 : 0] vrt; output sat; wire [34 : 0] opa; wire [34 : 0] opb; wire [34 : 0] sum; wire co; wire [31 : 0] vrt; wire sat1, sat2, sat3, sat4; wire sat; assign opa = {vra[31:24], 1'b0, vra[23:16], 1'b0, vra[15:8], 1'b0, vra[7:0]}; assign opb = {vrb[31:24], 1'b0, vrb[23:16], 1'b0, vrb[15:8], 1'b0, vrb[7:0]}; assign {co,sum} = opa + opb; assign {sat0, vrt[ 7 : 0]} = sum[ 8] == 1'b1 ? 9'h1ff : {1'b0, sum[ 7 : 0]}; // 如果有进位,结果为全1 assign {sat1, vrt[15 : 8]} = sum[17] == 1'b1 ? 9'h1ff : {1'b0, sum[16 : 9]}; assign {sat2, vrt[23 : 16]} = sum[26] == 1'b1 ? 9'h1ff : {1'b0, sum[25 : 18]}; assign {sat3, vrt[31 : 24]} = co == 1'b1 ? 9'h1ff : {1'b0, sum[34 : 27]}; assign sat = sat1 | sat2 | sat3 | sat4; endmodule
第六次作业 • 任务:VSFX模块的RTL代码综合及FPGA上的验证 • 目的:检查所设计的代码是否是可综合的;检查所设计的电路的时序。 • 提交报告 • 综合报告中是否有error、warning?如果有,是哪些类型? • 你的设计最快能跑多快? • 提交内容:综合报告+你的简单总结 • 提交时间:5月16日,电子版,email
第七次作业 • 任务:顶层设计及仿真验证 • 将所设计的VSFX模块与top连接,形成完整的altivec模块,并通过功能验证。 • vsfx top level的验证平台(module_verification文件夹),该平台基于systemverilog软硬件自动比对,默认为每组同学随机产生1000组验证向量。 • 使用方法、示范及其修改建议见./module_verification/VSFX功能验证平台使用示例.docx。 • 目的: • 了解top设计验证环境 • 验证所设计的功能的正确性 • 提交报告及设计打包时间:5月27号
验收 • 5月30日,上机演示设计的正确性。