微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 最近面试一些问题 请教

最近面试一些问题 请教

时间:10-02 整理:3721RD 点击:
最近去面试,有一些问题请教大家
1. if else 和 case语句
if else是有优先级控制的,case是并行无优先级的,综合后有什么差异?
if else 综合后是多级MUX结构,越靠近if的分支优先级越高,其路径的Path delay越小。
case综合后会是什么样子,,都是比较器结构吗?
以上所提到的综合结果,在最终在FPGA实现上真的会有这样的差异吗?
2. 状态机
  使用两段式状态机还是3段式状态机,
这个只是coding style的问题,3段式状态机只是状态机输出经过一个always块描述。实际coding style中不是应该约束每个always块中只能对一个信号进行赋值吗?必然是3段式的状态机啊。
使用摩尔机还是米勒机?
两种状态机应该都是可以使用的啊,只是输出和输入是否有逻辑关键而已,实际应用中难到有哪一种不符合coding style吗?
  如果状态机控制信号都是寄存器输出,摩尔机和米勒机在codiing style中有什么本质的不同?
米勒机状态输出与输入有关系,只是说timing上要考虑输入的delay状况,还有什么别的吗?

tong wen

状态机那个,我认为是这样的:两段式代码,把输出定格在状态切换过程中了。
always@(posedge clk)
  if(!rst) state <= ILDE;
  else   state  <= n_state.
always@(*)
begin
.l...
  ...
end

第二个问题问得太没有水准了;
more型状态机;是与输入没有关系的。只与当前的状态有关系的,
举个简单例子:S0 -〉S1 -> S2-> S3->S0
只要状态在S1,一个时钟后就切换到S2了
mealy 状态机 与输入相关的,如果不同的输入,下一个状态是未知的。

第一个问题,
if else和case并没有本质区别。如果条件互斥,if else一样可以综合出并行结构(并非mux,因为mux往往不是面积最小的结构)。如果条件不互斥,case一样可以综合出有优先级的结构。
第二个问题,
三段式状态机只是课本上的东西,实际设计中,状态转移往往伴随输出信号的变化,如果使用三段式表述,会有很多冗余逻辑。

顶顶顶顶!

规范的写法if else 综合后是有优先级的,因为在执行时是顺序执行的,而case语句是并行的mux结构!两者综合出来的电路并不相同。综合的结果和程序的执行方法是相关的!
两段式或是三段式本质上没有区别,Moore和mealy型都可以采用!

电路的区别是执行的方式本身,不能拘泥于描述风格本身,相同的综合结果可以有成千上万中描述方法,只要他们在程序执行时被编译器理解成一样的就行了!

mmmmmmm

great

1,case可以综合成多输入的MUX,并且如果输入特别多的话,会先并行几个MUX然后再加第二级MUX,在而if else会生成多级串联的MUX,路径比较长了。
2,主要还是要状态定义清晰了。

值得研究

关于第一个问题,实际上还和综合工具有关。拿synplify来说,老一些的版本是有区别的,新的版本上可以综合成一样的。虽然如此,在写code时,还是保守一些好。

第一个问题 case综合出来也多路选择器,路径要比if else出来的要短,这个主要是针对IC设计来说的,但是对于fpga设计来说,case和if else的实现可能都是一样的路径,因为fpga的实现是查找表。
第二个问题对于IC设计来说,因为不用考虑走线的延时,所以状态机的设计基本是二段式,但是对于fpga设计来说,走线延时很大,而且寄存器也比较多,所以建议用三段式。第一段always@(posedge clk)
  if(!rst) cur_state <= ILDE;
  else   cur_state <= next_state.
第二段:
always@(*)
begin
next_state =  cur_state  ;
case(cur_state)
3'b001 :  if()  next_state =   ;
3'b010 :  if()  next_state =   ;
3'b100 :  if()  next_state =   ;
default : next_state =  cur_state  ;
endcase
end
只用来描述状态跳转的。
第三段:
always@(posedge clk)
   if(!rst)
      control_signal <= 1'b0 ;
  else if (cur_state == )
       control_signal <= 1'b1;
   else
      control_signal <= 1'b0 ;
第三段描述各个状态下的控制信号的。

2楼状态机回答有误

3楼的 ,,,,,你忽悠人啊 被我识破了

顶13楼的!
关于if else和case的问题,FPGA上的差别性确实会少一些,不过也取决于FPGA slice里所含的LUT的input数目和code中的分支数目,如果不是perfect match,综合优化的时候还是可能有差别的。
状态机学习了。

16# layow
什么样的公司问这种问题啊?太学院派了。

靠,都忘记玩了

为什么会有很多冗余逻辑?我觉得两段式三段式只是编码风格不同,不存在孰优孰劣。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top