首页 > 精品范文库 > 12号文库
逻辑设计心得[五篇]
编辑:蓝色心情 识别码:21-876037 12号文库 发布时间: 2024-01-17 13:08:38 来源:网络

第一篇:逻辑设计心得

很早之前就想对这几个月工作经历写的东西,一是作为自己的总结,二是自己也很 想将自己这段时间的一些经历和大家分享一下,希望对初学者而言能使得他们能少走一 些弯路。只是公司里的事情很多,最近经常加班,所以一直拖到现在。

能来到这家公司应该是一种缘份--缘起NIOS。当初三月份altera来我们学校建立SO PC实验室的时候自己还不知道NIOS是什么东西,只是想在altera的FAE讲完NIOS后多问他 几个时序约束的问题,然后拷一份PPT回去。但是想不到因为那一份NIOS的培训资料,我 认识了edacn上的cawan,他给我讲了很多NIOS的东西,之后是丁哥在SOC版帖了位NIOS大 赛的通知,然后我和队友就去报了名,并去川大参加了NIOS的培训,认识了峻龙的FAE------o|> | | | / clk |--------|---------10)禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加了静态时序分析的 复杂性。如FPGA的输入时钟是25M的,现在系统内部要通过RS232与PC通信,要以rs232_ 1xclk的速率发送数据。不要这样做: always(posedge rs232_1xclk or negedge rst_n)begin...end 而要这样做:

always(posedge clk_25m or negedge rst_n)begin...else if(rs232_1xclk == 1'b1)...end 11)状态机要写成3段式的(这是最标准的写法),即...always @(posedge clk or negedge rst_n)...current_state <= next_state;...always @(current_state...)...case(current_state)...s1: if...next_state = s2;......always @(posedge clk or negedge rst_n)...else a <= 1'b0;c <= 1'b0;c <= 1'b0;//赋默认值 case(current_state)s1: a <= 1'b0;//由于上面赋了默认值,这里就不用再对b、c赋值了

s2: b <= 1'b1;s3: c <= 1'b1;default:......3.ALTERA参考设计准则

1)Ensure Clock, Preset, and Clear configurations are free of glitch es.2)Never use Clocks consisting of more than one level of combinatori al logic.3)Carefully calculate setup times and hold times for multi-Clock sy stems.4)Synchronize signals between flipflops in multi-Clock systems when the setup and hold time requirements cannot be met.5)Ensure that Preset and Clear signals do not contain race conditio ns.6)Ensure that no other internal race conditions exist.7)Register all glitch-sensitive outputs.Synchronize all asynchronous inputs.9)Never rely on delay chains for pin-to-pin or internal delays.10)Do not rely on Power-On Reset.Use a master Reset pin to clear al l flipflops.11)Remove any stuck states from state machines or synchronous logic.其它方面的规范一时没有想到,想到了再写,也欢迎大家补充。

如何提高电路工作频率

对于设计者来说,我们当然希望我们设计的电路的工作频率(在这里如无特别说明,工作频率指FPGA片内的工作频率)尽量高。我们也经常听说用资源换速度,用流水的 方式可以提高工作频率,这确实是一个很重要的方法,今天我想进一步去分析该如何提 高电路的工作频率。

我们先来分析下是什么影响了电路的工作频率。

我们电路的工作频率主要与寄存器到寄存器之间的信号传播时延及clock skew有关。在FPGA内部如果时钟走长线的话,clock skew很小,基本上可以忽略, 在这里为了简 单起见,我们只考虑信号的传播时延的因素。

信号的传播时延包括寄存器的开关时延、走线时延、经过组合逻辑的时延(这样划 分或许不是很准确,不过对分析问题来说应该是没有可以的),要提高电路的工作频率,我们就要在这三个时延中做文章,使其尽可能的小。

我们先来看开关时延,这个时延是由器件物理特性决定的,我们没有办法去改变,所以我们只能通过改变走线方式和减少组合逻辑的方法来提高工作频率。1.通过改变走线的方式减少时延。

以altera的器件为例,我们在quartus里面的timing closure floorplan可以看到有 很多条条块块,我们可以将条条块块按行和按列分,每一个条块代表1个LAB,每个LAB里 有8个或者是10个LE。它们的走线时延的关系如下:同一个LAB中(最快)< 同列或者同 行 < 不同行且不同列。

我们通过给综合器加适当的约束(不可贪心,一般以加5%裕量较为合适,比如电路 工作在100Mhz,则加约束加到105Mhz就可以了,贪心效果反而不好,且极大增加综合时 间)可以将相关的逻辑在布线时尽量布的靠近一点,从而减少走线的时延。(注:约束 的实现不完全是通过改进布局布线方式去提高工作频率,还有其它的改进措施)2.通过减少组合逻辑的减少时延。

上面我们讲了可以通过加约束来提高工作频率,但是我们在做设计之初可万万不可 将提高工作频率的美好愿望寄托在加约束上,我们要通过合理的设计去避免出现大的组 合逻辑,从而提高电路的工作频率,这才能增强设计的可移植性,才可以使得我们的设 计在移植到另一同等速度级别的芯片时还能使用。

我们知道,目前大部分FPGA都基于4输入LUT的,如果一个输出对应的判断条件大于 四输入的话就要由多个LUT级联才能完成,这样就引入一级组合逻辑时延,我们要减少组 合逻辑,无非就是要输入条件尽可能的少,这样就可以级联的LUT更少,从而减少了组 合逻辑引起的时延。

我们平时听说的流水就是一种通过切割大的组合逻辑(在其中插入一级或多级D触发 器,从而使寄存器与寄存器之间的组合逻辑减少)来提高工作频率的方法。比如一个32 位的计数器,该计数器的进位链很长,必然会降低工作频率,我们可以将其分割成4位和 8位的计数,每当4位的计数器计到15后触发一次8位的计数器,这样就实现了计数器的切 割,也提高了工作频率。

在状态机中,一般也要将大的计数器移到状态机外,因为计数器这东西一般是经常 是大于4输入的,如果再和其它条件一起做为状态的跳变判据的话,必然会增加LUT的级 联,从而增大组合逻辑。以一个6输入的计数器为例,我们原希望当计数器计到111100后 状态跳变,现在我们将计数器放到状态机外,当计数器计到111011后产生个enable信号 去触发状态跳变,这样就将组合逻辑减少了。

上面说的都是可以通过流水的方式切割组合逻辑的情况,但是有些情况下我们是很 难去切割组合逻辑的,在这些情况下我们又该怎么做呢?

状态机就是这么一个例子,我们不能通过往状态译码组合逻辑中加入流水。如果我 们的设计中有一个几十个状态的状态机,它的状态译码逻辑将非常之巨大,毫无疑问,这极有可能是设计中的关键路径。那我们该怎么做呢?还是老思路,减少组合逻辑。我 们可以对状态的输出进行分析,对它们进行重新分类,并根据这个重新定义成一组组小 状态机,通过对输入进行选择(case语句)并去触发相应的小状态机,从而实现了将大的 状态机切割成小的状态机。在ATA6的规范中(硬盘的标准),输入的命令大概有20十种,每一个命令又对应很多种状态,如果用一个大的状态机(状态套状态)去做那是不可 想象的,我们可以通过case语句去对命令进行译码,并触发相应的状态机,这样做下来 这一个模块的频率就可以跑得比较高了。

总结:提高工作频率的本质就是要减少寄存器到寄存器的时延,最有效的方法就是 避免出现大的组合逻辑,也就是要尽量去满足四输入的条件,减少LUT级联的数量。我们 可以通过加约束、流水、切割状态的方法提高工作频率。

第二篇:逻辑设计工程师岗位职责

1.根据项目需求完成相应的PLD、FPGA程序设计、优化及调试等工作。

2.根据要求书写规范的编程手册、调测报告等文档。

3.配合硬件工程师进行调测。

第三篇:控制逻辑设计_教案

11章 控制逻辑设计

一.定义对话模块

对话程序主要是应用于PBO,PAI.POV(F1帮助事件).POH(F4帮助事件)三个事件中。

对话程序主要的定义方式为:

Module name output.…….Endmodule.Module name input.…….Endmodule.定义好的对话模块是不专属与任何一个事务屏幕,而是可以在任意一个事务屏幕中调用。通过系统变量sy-dynnr来获得当前调用对话模块的屏幕号。

二.调用对话模块

调用对话模块的语法:

Module mod.事物程序的执行流程:P366。

三.无条件调用

无条件的调用,主要应用与back,exit,cancel 这几个按钮当中。

无条件调用的意义:

在用户进行操作时,在不可避免的情况下不知道如何输入数据和进行了误操作,进入了一个无法操作的界面,而此界面又会有一些输入的检查,所以直接按后退或者退出的按钮时,不会进行后退的功能。因此出现了无条件调用。无论用户输入满足系统检查与否,该模块都将首先被其调用。

无条件调用的定义方式:

1.首先set pf-status 中设置一个BACK的按钮。然后双击该功能代码或者通过goto→object list → function list 进行设定。2.将该功能码的类型更改成E的类型。3.在接收和处理此功能的方式为:

a)在逻辑流中PBO事件里添加一个新的module。如:module mod at exit-command.(将功能码的类型定义为E类型以后。必须使用此类型进行处理)b)在程序中处理的方式为:

Module mod input.If ok_code = ‘BACK’.Clear ok_code.Leave to screen 0.Endif.Endmodule.四.数据传输控制

1.系统自动传输

系统自动传输的主要方式为,将屏幕中的字段与ABAP程序中的字段同名。那么在屏幕的PBO执行中。如果ABAP中的字段进行了初始化,那么在PBO执行结束时,屏幕中的字段自动被进行了初始化。

2.模块条件调用

1)单字段条件调用

Field dynpfield Module mod on input.Dynpfield :为屏幕中字段的名字。

Module:为ABAP中处理条件的module名。

另外一种形式:

Field dynpfield Module mod On Request.这种形式是只有在用户对该字段进行输入值时,才调用ABAP模块。任何形式的手工输入都会触发On Request 条件,系统将下列设置字段的方式视为手工输入:

a)实际用户输入。

b)通过set parameter字段输入(手工和自动两种).c)通过hold data 功能设置字段输入(在菜单system→user profile→hold data中设置)

d)用于事物调用时的参数输入(call transaction…..using)。e)用于整个定制系统的全局字段。

2)组合字段条件调用

Chain.Field: f1, f2 …………

Module mod1 on chain-input | chain-request.Field: g1, g2………….Module mod2 on chain-input | chain-request.Endchain.其中chain-input 和chain-request 与单字段条件调用中的on input 和 on request类似。两种的区别在于,如果field语句中的任意一个字段满足条件,则触发位于该字段之前的模块。对于on chain-input,如果链中的任意字段包含初始值(空或零)以外的值,则调用ABAP模块。对于on chain-request,如果链中的任一字段的值发生用户输入时间,则调用ABAP模块,所以当fi之一满足条件时,mod1被调用,当fi或gi满足条件时,mod2调用。

五. 输入检查

1.检查单个字段

field spfli-airpfrom MODULE check_fr_airport.module check_fr_airport input.select single * from sairport into it_spfli where id = spfli-airpfrom.if sy-subrc <> 0.MESSAGE e003(zp)WITH spfli-airpfrom.ENDIF.endmodule.2.检查多个字段

Chain.Field: spfli-carrid, spfli-connid.Module check_flight.Endchain.如果二者之一出现错误,将触发错误消息,两个字段也均可输入。

第四篇:数字逻辑设计报告

《数字逻辑课程设计》

姓名: 宋国正 班级:计142 学号:149074056

202_年9月25日

一、设计任务要求

数字时钟是由振荡器、分频器、计秒电路、计分电路、计时电路组成。计时采用24h和12h两种。当接通电源或数字钟走时出现误差,都需要对数字钟作时、分、秒时间校正。本次设计的具体要求如下:

1、显示时、分、秒的十进制显示,采用24小时制。

2、校时功能。

3、整点报时。

二、设计思路

1、数字钟的组成原理图

数字式电子钟实际上是一个对标准1Hz 进行计数的计数电路!秒计数器满60 后向分计数器进位,分计数器满60 后向时计数器进位, 时计数器按24翻1 规律计数, 计数输出经译码器送LED 显示器,由于计数的起始时间不可能与标准时间一致,故需要在电路上加上一个校时电路。

同时标准的1Hz时间信号必须做到准确、稳定,通常使用石英晶体振荡器电

路构成。

时显示器

分显示器 秒显示器

时译码器

分译码器

秒译码器

时计数器

时计数器 时计数器

校时电路

振荡器

分频器

2、数字钟设计方案

为完成上述功能,可以把数字钟系统划分为三部分:时针源(即标准秒钟的产生电路)主体电路,扩展电路。主体电路EDA 设计又可划分为计时电路、校时电路、译码显示电路3部分。

3、底层电路设计

时针源——晶体振荡器电路给数字式电子钟提供一个频率稳定、准确的32768Hz的方波信号,将32768Hz的高频方波信号经32768次分频后得到1Hz 的方波信号供秒计数器进行计数,实现该分频功能的计数器相当于15 级二进制计数器。

计时电路——时间计数器电路由秒个位、秒十位计数器,分个位、分十位计数及时个位、时十位计数电路构成。其中,秒个位和秒十位计数器,分个位和分十位计数为六十进制计数器,而根据设计要求时个位和时十位构成的为二十四进制计数器,时间计数单元共有:时计数,分计数和秒计数3部分,根据设计要求时计数单元为一个二十四进制计数器,共输出为两位8421BCD码形式;分计数和秒计数单元为六十进制计数器!共输出也为两位8421BCD码。图1和图2 分别给出了60进制计数器和24进制逻辑图。

一、60进制计数器

二、24进制计数器

校时电路——当刚接通电源或走时出现误差时都需要对时间进行校正。对时间的校正是通过截断正常的计数通路,而用频率较高的方波信号加到其需要校正的计数单元的输入端!这样可以很快使校正的时间调整到标准时间的数值,这时再将选择开关打向正常时就可以准确走时了。如图3所示为时、分、秒校时的校时电路。在校时电路中,其实现方法是采用计数脉冲和计数使能来实现校时的。

译 码 显 示 电 路——为了将计数器输出的8421BCD码显示出来,须用显示译码电路将计数器的输出数码转换为数码显示器件所需要的输出逻辑和一定的电流,这种译码器通常称为七段译码显示驱动器电路,本设计可选器件7447为译码驱动电路。译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流。

4、数字钟顶层电路设计

首先按前面的设计方案进行低层模块的设计与编辑仿真,正确无误后,即可将设计的低层模块转化为与之相对应的元件符号,而后我们就可以用这些元件符号来设计数字钟的顶层原理图,如图4所示。本设计中要仿真的对象为数字钟,须设定一个1Hz的输入时钟信号和一个校时脉冲SET,模拟的设置开关信号MODE的波形,为了能够看到合适的仿真结果,假定网络时间(Girl Size)为10.0ns,总模

拟的时间(END TIME)为3ms。

三、软件仿真 1、60进制计数器的仿真结果如下:

60进制计数器仿真波形图 2、24进制计数器仿真结果如下:

24进制计数器仿真波形图

3、数字钟的顶层电路仿真结果如下:

数字钟的顶层电路波形仿真图

四、讨论

数字时钟基于MAX+ plus II设计, 经过软件仿真并下载到硬件(电子EDA 10

实验开发系统)实现, 结果表明本设计是合理可行的,但是感觉很繁琐,是不是可以考虑一种过程简单一点的呢?通过查阅大量资料发现是可以的。其另一种设计思想及方法是以语言描述为主, 原理图设计相结合。但是使用过多可能会导致编译失败。所以在设计的过程中,如何取舍是一个难题,本人认为对于我这样基础不是很扎实的,采用前者是比较合理的。

五、参考文献

(1)张辉宜,数字逻辑 中国科学技术大学出版社

(2)廖裕评,陆瑞强,CPLD数字电路设计__使用 MAX+Plus II[M],北京:清华大学出版社

六、心得体会

我学到了很多东西,掌握了数字逻辑的各种设计方法

第五篇:组合逻辑设计教学设计

组合逻辑电路的设计

新都职校

一、教材分析

《数字电路》是一门理论性和实践性都很强的专业核心课程,而“组合逻辑电路”在教材的知识体系中处于中间地位,起着“承前启后”的作用。

《组合逻辑电路的设计》应该在学生学习了“数字电路基础”、“逻辑门电路”“组合逻辑电路分析”的基础上进行,既可以检验前面所学知识又可以延伸后续知识。

教学重点:介绍组合逻辑电路的设计方法和步骤。

教学难点:引导学生按步骤设计出经济又实用的组合逻辑电路。

二、学情分析

本次授课对象是10机电8班的全体同学,在前面的学习中,他们已经掌握了基本逻辑门电路、逻辑代数基本公式、逻辑表达式的化简和组合逻辑电路的分析等基础知识做铺垫,故对本次课内容有接受的能力。

三、教学目标

知识目标:使学生熟练掌握组合逻辑电路的设计方法及步骤,提高学生学以致用的能力。能力目标:培养学生认真学习、勇于探索的精神;启发学生举一反

三、触类旁通的创新思维能力。情感目标:通过课堂的师生交流,生生交流,培养学生与人交流团结协作的能力。

四、教学方法

教师的准备工作:熟悉教学大纲和课程标准;钻研教材写好教案;设计好教学过程,准备好课件、教学工具等。

为了激发学生的兴趣,调动学生的积极性,教学过程中我主要采用“任务驱动法”来进行教学,结合学生特点,精心设计任务,引导学生分析任务探究新知,然后启发学生运用所学知识解决实际任务。中间配合使用类比法、仿真法、讨论法、演示法来达到我们的教学目标。

五、教学过程

教学过程共设计了:温故知新、任务驱动、探究新知、巩固提高等教学环节,用时1个课时。温故知新——采用教师提问、学生回答的互动方式来进行,共复习了三个知识点:(1)基本常用门的符号、表达式、真值表及功能;

(2)逻辑代数运算的基本定律及化简办法。这两个知识点是基础工具,学习了之后学生才可以用门电路来搭建一个个具有某种功能的数字电路。

(3)接着提问 2个问题:①何为组合逻辑电路的分析?②组合逻辑电路分析的一般步骤有哪几步?(要求学生用流程图回答)。然后用一道题来简单演练分析步骤,加深学生印象,并为新知识的教授做好 铺垫。

任务驱动——引领学生进行思考:给出一个组合逻辑电路图,我们能分析出它的逻辑功能,那么给出一个逻辑命题,我们能否根据要求的逻辑功能设计出逻辑电路呢?如何设计一个三人表决器呢?学生根据课前预习情况会做出相应回答,即跟组合逻辑电路的分析过程相反,需要五步——相反顺序的五步。其实本次课的“设计”过程是上次课“分析”过程的逆过程,也是本次课的主题。

接下来教师用板书导出教学重点。任务启动好之后,学生们根据提示的方法步骤,分析思考,分组交流,教师则巡回指导,一段时间后各小组就开始展示成果了。通过这个“生生交流”“师生交流”的过程,引导学生进行自主探究、合作学习,同时也巩固加深了教学重点内容的理解和运用。

探究新知——引导学生思考:如何设计出经济又实用的组合逻辑电路?第一次的设计是不是最完美的?如果用“与非门”来设计会有什么不同?两种方案设计的“三人表决器”逻辑电路哪种更好?为什么?学生们在经过逻辑代数的变换、化简后很快又展示了第二种设计方案。

教师引领学生对比分析这两种设计方案,发现两种设计方案都只用了4个门电路,不同的是:方案 1中的四个门,有3个是“与门”1个是“或门”,而方案2中的4个门都是“与非门”,对比之下门电路种类单一,相对好些。通过层层设疑,再次激发了学生的学习热情,突出了本节课的教学难点:在实际应用中,组合逻辑电路的设计多用“与非门”来实现,可以降低成本,避免不必要的人力、物力浪费。

任务1结束后,继续布置第2个任务,将任务1的只有1个输出量的设计任务,提升到2个,加大了工作量,提高了难度,目的是鼓励学生,开阔思路,创新思维,突破重点难点,也使枯燥、乏味的新课内容很流畅的就被“由浅入深”“化难为易”了。最后教师用板书将重点、难点提炼出来,巩固所学,加深印象。

“巩固提高”环节——在同学们共同完成任务1,2之后,教师又给学生们设置了两个加强任务,要求学生独立完成,以此自行消化、吸收、巩固掌握本次课的知识点的目的。

六、结束语

本次教学过程以学生为主体,教师为主导进行“教学互动”;不断激发学生的求知欲和学习热情,让学生们在教学过程中体验成功、自我肯定、提升能力。教学效果较好。

逻辑设计心得[五篇]
TOP