科学网

 找回密码
  注册
科学网 标签 EDA

tag 标签: EDA

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

EDA实验室真干净!(天津大学)
热度 1 zlyang 2014-4-17 15:41
EDA实验室真干净!(天津大学) 今天上午去综合实验楼,发现 7 层的 EDA 实 验室真干净! 原来 刘 C 老师花了很大精力彻底打扫了一次:连计算机台都用吸尘器吸过了。 纤尘不染!
3554 次阅读|3 个评论
电子工程设计又进入了个人化时代
accsys 2010-9-26 14:00
姜咏江 学多人认为现代科研越来越群体化、团队化,其实不然,代表人类尖端的微电子设计工程如今又回到了个人化时代。自从有了EDA软件和FPGA器件,那种多人合作进行工程设计的场面越来越少了。这其中最为突出的是包括计算机CPU 在内的SoC设计。 SoC被广泛地应用在医疗、家电、汽车、航天等人类生活的各个领域,当然也包括计算机自身的设计和实现。说句实话,自己用EDA软件和FPGA设计一个专用的计算机并不十分困难,关键是看我们自己是否有这个勇气。5年前我曾劝某理工大学和某工业大学的同行,希望他们能够参加到计算机CPU芯片设计研究,想不到他们居然先后都说:CPU设计的水太深。5年的时间过去了,EDA技术和FPGA在我国更加普及了,我不知道我的这两位同行是不是还这样认为? 我认为我们急需在青少年之中开展FPGA设计,让他们自己设计出一些计算机来,提高他们对高科技的认识。当年轻人让自己设计的计算机运行起来的时候,那么一切游戏的魅力就会骤减。在青少年中开展计算机核心设计活动,更重要的是会让未来的中国人不再是美国高科技的奴隶! 计算机核心技术并不难,难的是我们对计算机技术缺乏认识。本人认为计算机原理和基本设计的技术课程完全可以放到中学中去讲,这不是什么无稽之谈,而是现实。当前最大的问题是掌握科技教育大全的人物,太缺乏这方面的知识了。 2010-9-26
个人分类: 教学点滴|3522 次阅读|1 个评论
可精确计算的浮点加减法运算器硬件设计程序
accsys 2010-9-26 08:56
姜咏江 1. 说明 这里给出正确的程序设计,朋友们可以与上次中秋节给出的有缺欠的设计程序对比,也许会有深刻一点的体会。下面程序的输出omov、osign只是为了设计时参考,并非必要。实际使用时,尾数加减法运算器要带上溢出标志,有兴趣的朋友将这里给出的程序稍加修改就可以做到。以下设计是在Quartus II上进行的。读者可将下面的程序直接复制到Quartus II中进行测试。 浮点乘除法运算器不用对阶,只要尾数乘除,阶码加减,因而相对设计难度不大,朋友可以自己去设计试试。 2. 设计的Verilog HDL语言描述 /*这是我65岁年初编写的程序:限位数32位浮点加减法运算器设计。阶码的变化范围是-128~127,尾数右移损失有效码由mov_f监控。这里的浮点数表数范围是 -0.16777216 *2exp127 ~+0.16777216 *2exp127 */ module fudian(f_a,f_b,clk,rst,me,f_out,sub,omov,mov_f,space,osign); input f_a,f_b; //输入浮点数 input clk, //时钟 me, //选择使用 rst, //复位信号 sub; //减法控制 output f_out; //结果浮点输出 output omov; //参考:移动后的尾数 output mov_f; //参考:甩掉有效数字尾标志 output space; //参考:甩掉的尾数,可以提供精确计算数据 output osign; //参考:移位数 reg f_out; //寄存器型输出 reg osign; reg exp_out; reg exp_a,exp_b; reg sign,ep_b; //保证不溢出用9位判断 reg man_out; reg a_a,b_b,c_c; reg tru,zero,shift; reg mov_flg; reg one=1'b1; assign space = shift; assign mov_f = mov_flg; assign omov = c_c; always @(posedge clk or negedge rst) begin if (!rst) begin exp_a = 8'h00; exp_b = 8'h00; a_a = 24'h000000; b_b = 24'h000000; tru = 256'hffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; zero = 256'h0000000000000000000000000000000000000000000000000000000000000000; sign = 9'b000000000; ep_b = 9'b000000000; end else if (me) begin exp_a = f_a ; exp_b = f_b ; a_a = f_a ; b_b = f_b ; if (exp_b ) ep_b={one,exp_b}; else ep_b=exp_b; sign = exp_a - ep_b; end end always @(posedge clk ) begin if (!sign ) //exp_a exp_b begin osign = sign; exp_out = f_a ; //取f_a原阶码 if (b_b ) //f_b的尾数为负数 {c_c,shift} = {tru,b_b,zero} sign; //需要按负数扩充,然后右移 else {c_c,shift} = {b_b,zero} sign; end else //差为负 begin osign = -sign; exp_out = f_b ; //取f_b原阶码 if (a_a ) {c_c,shift} = {tru,a_a,zero} -sign; //需要按正负数扩充 else {c_c,shift} = {a_a,zero} -sign; end end always @(posedge clk ) begin if (!sub) //加 if (!sign ) man_out = a_a + c_c; else man_out = b_b + c_c; else //减 if (!sign ) man_out = a_a - c_c; else man_out = b_b - c_c; end always @(posedge clk ) begin f_out = {exp_out,man_out}; //输出 if (!shift) mov_flg =1'b0; else mov_flg =1'b1; //移位有损失,影响精度 end endmodule 3. 仿真 下面是十六进制的浮点加减法运算器仿真。图1是阶码符号相反的运算,求的是十六进制的0.1543292 08 0.7345662 FA ;图2是阶码符号相同的运算,求的是十六进制的0.1543292 08 0.9245662 11 。 图 1 阶码符号相反的运算 图 2 阶码符号相同的运算仿真 2010-9-26
个人分类: 计算机核|5202 次阅读|0 个评论
计算机中如何比较数的大小?
accsys 2010-9-25 06:31
姜咏江 计算机的位长是固定的,在使用硬件描述语言进行CPU设计时要特别注意。假如你定义了16位数据长度的运算器,要比较两个数的大小,用EDA语言描述时就会出现预想不到的结果。 例如,要比较有符号数16he0a0与16h60a0的大小,显然前者是一个负数,会小于后者。但当你用Verilog HDL进行比较时,就会得出前者大于后者的结论。这是为什么?原来我们使用的计算机是32位的,不论你设计的位长是多少,都要变成32位数到处理器中进行比较。因而比较之前要先将这两16位数扩充成32位数。由于Verilog HDL认定扩充位数前面添0,故而会得出有符号的16he0a0 16h60a0的结论。 此例在32位Verilog HDL中做减法,会得到差为32h00008000,其中的变化过程是: 16he0a0 - 16h60a0 = 32h0000e0a0 32h000060a0 = 32h0000e0a0+32hffff9f60 =32h00008000 依据最高位是0,因而判断出有符号数16he0a0 16h60a0。 按着限位数正负数判断和扩充位数方法,16he0a0是负数,因而扩充成32位应是32hffffe0a0。所以用32位计算机比较这两个16位正负数大小用减法应是: 16he0a0 - 16h60a0 = 32hffffe0a0 32h000060a0 =32hffffe0a0+32hffff9f60 =32hffff8000 用这种方法才能正确地比较出不足32位正负数的大小。 2010-9-25
个人分类: 教学笔记|14363 次阅读|0 个评论
精确科学计算的工具:浮点加减运算器的限位数设计
accsys 2010-9-22 12:00
____中秋给计算机的朋友送大礼 姜咏江 1. 前言 利用计算机浮点运算器能够进行精确计算吗?利用本文设计的浮点运算器就可以进行浮点方式精确计算。 IEEE754标准将32位数用一位表示正负号,这是一种浪费。限位数方法设计浮点运算器不用占用多余的位置表示正负,因而尾数会比IEEE754标准多出一位,同样位长表示的浮点数会比IEEE754有更大的数域。用限位数方法表示浮点数,阶码也不用使用移码。 2. 设计背景 计算机浮点运算器设计中IEEE754标准强行如下规定: 1. 如果指数是0 并且小数部分是0,这个数0(和符号位相关); 2. 如果指数 = 2 e 1 并且小数部分是0,这个数是 无穷大(同样和符号位相关); 3. 如果指数 = 2 e 1 并且小数部分非0,这个数表示为不是一个数(NaN)。 这种规定不符合数值运算的规则,会造成极大偏差。 第一, 0无正负,02 0 就是0,不应该强行规定什么所谓的0; 第二, 即使指数 = 2 e 1(这里 e=8)尾数是0,此时的数值仍然是0,也不应该规定是无穷大; 第三, 指数 = 2 e 1并且小数部分非0,恰是一个确定的数,强行规定不是一个数(NaN)更违背数学原则。 3. 设计方法 本限位数浮点加减法运算器仍然采用8位的阶码设计,由于限位数自身就表示了正负,因而阶码值的变化范围是-128~127,对阶时最大移位是255。由于对称制的两限位数之差等于其所代表的有符号数之差,固可以用值较大的数减去较小的数得到8位无符号移位数。为保证精确计算的需要,特设置了移出变量 space,用它来找回移位时丢失的有效部分。 尾数右移损失有效码与否由mov_f监控,即mov_f=1时移出的数码不全为0。 限位数概念之下,规定阶码8位,尾码24位时,那么32位的浮点数其表值范围为: -0.167772162 127 ~+0.16777216 2 127 用二进制限位数的表示应是: .100000000000000000000000010 01111111 ~.011111111111111111111111010 01111111 需要指出,限位数小数点的左方是不能够随便添加0的,原因是二进制限位数的最高位数码指示着该数的正负,并且小数点左面有数码就会增加限位数表数的位数。例如,0.866和.866是不同值的,前者是一个正数,而后者是一个负数。 因为对阶时尾数右移的位数可以通过减法运算得到,加减运算的阶码需要取较大的数,因而采用大数减小数的方式就可以直接得到右移的位数。例如,阶码运算是127-(-128),化成二进制数是 0111111-10000000 = 01111111 + |10000000| = 11111111 大数减小数的结果是无符号数这是可以证明的,所以右面的结果可以认定是255。 4. 设计的Verilog HDL语言描述 /*这是我65岁年初编写的程序:限位数浮点加减法设计。阶码的变化范围是-128~127,尾数右移损失有效码由mov_f监控。这里32位的浮点数表数范围是 -0.16777216 *2exp127 ~+0.16777216 *2exp127 */ module fudian(f_a,f_b,clk,rst,me,f_out,sub,omov,mov_f,space,osign); input f_a,f_b; //输入浮点数 input clk, //时钟 me, //选择使用 rst, //复位信号 sub; //减法控制 output f_out; //结果浮点输出 output omov; //参考:移动后的尾数 output mov_f; //参考:甩掉有效数字尾标志 output space; //参考:甩掉的尾数,可以提供精确计算数据 output osign; //参考:移位数 reg f_out; //寄存器型输出 reg osign; reg exp_out; reg exp_a,exp_b; reg sign; //保证不溢出用9位 reg man_out; reg a_a,b_b,c_c; reg tru,zero,shift; reg mov_flg; assign space = shift; assign mov_f = mov_flg; assign omov = c_c; always @(posedge clk or negedge rst) begin if (!rst) begin exp_a = 8'h00; exp_b = 8'h00; a_a = 24'h000000; b_b = 24'h000000; tru = 256'hffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; zero = 256'h0000000000000000000000000000000000000000000000000000000000000000; sign = 9'b000000000; end else if (me) begin exp_a = f_a ; exp_b = f_b ; a_a = f_a ; b_b = f_b ; sign = exp_a - exp_b; end end always @(posedge clk ) begin if (!sign ) //exp_a exp_b begin osign = sign; exp_out = f_a ; //取f_a原阶码 if (b_b ) //f_b的尾数为负数 {c_c,shift} = {tru,b_b,zero} sign; //需要按负数扩充,然后右移 else {c_c,shift} = {b_b,zero} sign; end else //差为负 begin osign = -sign; exp_out = f_b ; //取f_b原阶码 if (a_a ) {c_c,shift} = {tru,a_a,zero} -sign; //需要按正负数扩充 else {c_c,shift} = {a_a,zero} -sign; end end always @(posedge clk ) begin if (!sub) //加 if (!sign ) man_out = a_a + c_c; else man_out = b_b + c_c; else //减 if (!sign ) man_out = a_a - c_c; else man_out = c_c - b_b; end always @(posedge clk ) begin f_out = {exp_out,man_out}; //输出 if (!shift) mov_flg =1'b0; else mov_flg =1'b1; //移位有损失,影响精度 end endmodule 5. 仿真 下面是十六进制的浮点加减法运算器仿真。图1是阶码符号相反的运算,求的是十六进制的0.1421762 68 0.54D1012 E5 ;图2是阶码符号相同的运算,求的是十六进制的0.1421762 68 0.0052192 73 。 图中sub=1为做减法运算。 图 1 阶码符号相反的运算 图 2 阶码符号相同的运算仿真 于2010-9-22中秋,欢迎讨论。
个人分类: 教学笔记|5166 次阅读|0 个评论
线路板CAD第一二章课件和作业
jiyipeng 2009-9-12 11:34
线路板CAD课件 第一二 章作业: 1.什么是PCB ,它在电子产品设计中起什么作用? 2 PCB的组成部分是什么?各自起什么作用? 3 画出电子产品设计总流程图。 4 你认为PCB作为一种元器件连接方式会永远存在下去吗?为什么? PCB文件和原理图文件联系的桥梁是什么? 为什么说它是一个桥梁? 5 如果出现替代PCB的技术,你认为是什么样的技术?说出你的理由。 6 . 用Protel DXP制作PCB的总的工作流程是什么? 7. 如何创建新的项目、新的PCB文件和新的原理图文件? 有问题可以留言,我会及时回答。作业下周上课前交。从下一次课开始点名,希望大家无特殊原因不要缺课。
个人分类: 再生能源教案|2860 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-20 17:52

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部