新闻中心

EEPW首页 > 电源与新能源 > 牛人业话 > 大神教你如何做好逻辑设计

大神教你如何做好逻辑设计

——
作者: 时间:2014-05-16 来源:网络 收藏

  11)状态机要写成3段式的(这是最标准的写法),即

本文引用地址://m.amcfsurvey.com/article/246996.htm

  ...

  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赋值了(b、c在该状态为0,不会产生锁存器,下同)

  s2:

  b <= 1'b1;

  s3:

  c <= 1'b1;

  default:

  ...

  ...

  3.ALTERA参考设计准则

  1) Ensure Clock, Preset, and Clear configurations are free of glitches.

  2) Never use Clocks consisting of more than one level of combinatorial logic.

  3) Carefully calculate setup times and hold times for multi-Clock systems.

  4) Synchronize signals between flipflops in multi-Clock systems whenthe setup and hold time requirements cannot be met.

  5) Ensure that Preset and Clear signals do not contain race conditions.

  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 all flipflops.

  11)Remove any stuck states from state machines or synchronous logic.

  其它方面的规范一时没有想到,想到了再写,也欢迎大家补充。

  是设计出来的

  我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中,给我感触最深的是华为的那句话:是设计出来的,不是仿出来的,更不是湊出来的。

  在我们公司,每一个项目都有很严格的评审,只有评审通过了,才能做下一步的工作。以做逻辑为例,并不是一上来就开始写代码,而是要先写总体设计方案和逻辑详细设计方案,要等这些方案评审通过,认为可行了,才能进行编码,一般来说这部分工作所占的时间要远大于编码的时间。

  总体方案主要是涉及模块划分,一级模块和二级模块的接口信号和(我们要求把接口信号的时序波形描述出来)以及将来如何测试设计。在这一级方案中,要保证在今后的设计中时序要收敛到一级模块(最后是在二级模块中)。什么意思呢?我们在做详细设计的时候,对于一些信号的时序肯定会做一些调整的,但是这种时序的调整最多只能波及到本一级模块,而不能影响到整个设计。记得以前在学校做设计的时候,由于不懂得设计时序,经常因为有一处信号的时序不满足,结果不得不将其它模块信号的时序也改一下,搞得人很郁闷。

  在逻辑详细设计方案这一级的时候,我们已经将各级模块的接口时序都设计出来了,各级模块内部是怎么实现的也基本上确定下来了。

  由于做到这一点,在编码的时候自然就很快了,最重要的是这样做后可以让设计会一直处于可控的状态,不会因为某一处的错误引起整个设计从头进行。

  如何提高工作频率

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

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

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

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

DIY机械键盘相关社区:机械键盘DIY


尘埃粒子计数器相关文章:尘埃粒子计数器原理


关键词: FPGA 时序 电路

评论


相关推荐

技术专区

关闭