elsif,即“优先级/解码”,将影响您的设计频率。利用您剩下的所有可用逻辑资源,您可以考虑一个案例陈述......除非您实际需要优先级/解码。即便如此,如果您能够提供延迟权衡,您可以在几个时钟周期内进行解码(管道解码),您的设计可能会增加频率......最终,您需要运行时序报告并查看慢速路径了解瓶颈。
如果你真的想使用RAM而不是FF,你可以推断一个RAM(创建一个数组),或者如果这对你不起作用,你可以手动实例化一个特定于设备的RAM ......然后,当然,为它添加控制逻辑。如果是原始的,则将其更换为“相同”的ASIC库原语
就“变量”而言,讨论与“VHDL”与“Verilog”相同,或“同步”与“异步”重置相同,主要只是意见,而我的是“我不是可合成变量的粉丝RTL“......它们对于合成是合法的,但它们在syn期间”消失“,因此如果您想查看网表并与RTL进行比较,则可以手动跟踪连接。通常没有充分理由拥有变量,因为它们在硬件方面没有任何意义,并且模糊了设计与网表。我喜欢看到wire / net / regs的逻辑类型,因此很清楚你在HW中创建了什么。但是,如你所愿,当我看到它们时,我只会畏缩。
同样,就阵列而言,我不是“将信号捆绑到数组中”的忠实粉丝......人们会认为它“更快”和“更容易”处理,但对我来说,它进一步混淆了设计。再说一次,这不是非法的,但是当谈到OPC(其他人的代码)时,尝试跟踪信号非常烦人,不仅是在模块内,而且是跨端口的数组......然后,如果它们切片那些数组,或者以其他方式摧毁它们,它变得更加烦人。有点喜欢这个咆哮:)
最终,你可以做任何你想做的事情,特别是在FPGA中,有些人往往不太关注与ASIC相比会产生什么。如果你正在设计一个ASIC,我会说你应该更倾向于更迂腐,能够查看你的RTL并知道将在某种程度上创建什么(因此能够估计门)如果你需要,请数。为此,我强烈建议花时间在绘图程序(例如visio)中绘制您的设计,以包括门,FF,解码器,Mux,FSM,适当的伪代码,时钟和重置树的详细信息,以及所有CDC交叉逻辑等,包括信号名称。一旦你拥有了它,这只是转换为RTL的问题......也可能是对那些与变量有共同看法的人的奖励,你会发现你的绘图中没有变量,因此RTL中没有变量。 :)