最近面试一些问题 请教
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
什么样的公司问这种问题啊?太学院派了。
靠,都忘记玩了
为什么会有很多冗余逻辑?我觉得两段式三段式只是编码风格不同,不存在孰优孰劣。
