← eetop.cn_数字IC设计工程师笔试面试经典100题(大部分有答案)

推荐答案 测试一下

用verilog编程,语法要符合FPGA设计的要求

编程题 中等 笔试真题

参考答案

本题要求编写符合FPGA设计要求的Verilog代码。核心考点在于理解可综合Verilog的风格与FPGA实现约束。 1. 使用always块时,组合逻辑推荐用阻塞赋值(=),时序逻辑推荐用非阻塞赋值(<=),以避免竞争与仿真错误。例如:always @(posedge clk) q <= d; 2. 避免在组合逻辑中产生锁存器:if-else或case语句必须覆盖所有分支,或给default赋值;否则综合出锁存器,影响时序与资源。 3. 禁止使用不可综合语句:如initial(除仿真外)、fork-join、延时#、系统函数$display等。 4. 推荐使用同步复位、同步置位:复位信号应与时钟沿对齐,避免使用异步复位带来的亚稳态问题(除非设计需要异步复位且做同步释放处理)。 5. 模块端口建议均为wire类型,内部定义reg或wire;对于输出端口,若需时序赋值需声明为output reg。 6. 多时钟域交互需同步处理,不能直接赋值;使用两级D触发器或FIFO进行跨时钟域同步。 7. 避免使用整数(integer)作为循环变量综合大型硬件,尽量使用generate for替代always中的for循环以控制展开。 8. 三态门需配合外部管脚声明,内部总线推荐使用多路选择器或桶形移位器实现。 示例:一个计数器的可综合写法如下: module counter ( input clk, input rst_n, output reg [7:0] cnt ); always @(posedge clk or negedge rst_n) begin if (!rst_n) cnt <= 8'b0; else cnt <= cnt + 1; end endmodule 易错点:混用阻塞和非阻塞赋值、组合逻辑中未完整赋值导致锁存器、误用不可综合构造、遗忘同步复位处理。

涉及知识点

  • 可综合Verilog语法规范
  • 阻塞与非阻塞赋值区别
  • 锁存器生成条件与避免
  • 同步/异步复位设计
  • 不可综合语句识别
  • 跨时钟域同步方法
← 上一题
登录后反馈错题
下一题 →