1、D触发器
module rtl( input clk, input rst_n, input d, output reg q ); always@(posedge clk or negedge rst_n)begin if(!rst_n) q <= 'b0; else q <= d; end endmodule
2、if else 选择
module rtl( input clk, input rst_n, input d1,d2,a,b,c, output reg q ); always@(posedge clk or negedge rst_n)begin if(!rst_n) q <= 'b0; else if(a&&b)begin if(c) q <= d1; else q <= d2; end end endmodule
可能综合为这种 >>>>>>>>>>
3、else if 与 case
module rtl( input clk, input rst_n, input a,b,c,d1,d2,d3,d4, output reg q ); always@(posedge clk or negedge rst_n)begin if(!rst_n) q <= 'b0; else if(a) q <= d1; else if(b) q <= d2; else if(c) q <= d3; else q <= d4; end endmodule
module rtl( input rst_n, input clk, input [1:0]a, input d1,d2,d3,d4, output reg q ); always@(posedge clk or negedge rst_n)begin if(!rst_n) q <= 'b0; else begin case(a) 'd1: q <= d1; 'd2: q <= d2; 'd3: q <= d3; default: q <= d4; endcase end end endmodule
module rtl( input rst_n, input clk, input [1:0]a, input d1,d2,d3,d4, output reg q ); always@(posedge clk or negedge rst_n)begin if(!rst_n) q <= 'b0; else if(a==1) q <= d1; else if(a==2) q <= d2; else if(a==3) q <= d3; else q <= d4; end endmodule
这种写法和上面的case综合出来的RTL电路相比,有优先级区别
注意:
以上电路视图为RTLviewer 。在完成综合后,还有一个可观察在FPGA中的实际连线情况视图:Technology Map Viewer
TechnologyMapViewer --技术映射查看器
1、QUARTUS II 中往往要查看RTL Viewer,其实RTLview是编译后的结果,显示的图形都是调用标准单元的结果,这是和思维有关联的显示结果,跟工艺库,FPGA类型,都没有关系;
2、Technology Map Viewer是已经映射到FPGA器件的,是在FPGA中的实际连线情况。
3、如果你只是想看下代码的RTL结构师什么样的,就看RTL view,如果想看映射到FPGA板子上是什么结构,就看Technology Map Viewer。
4、RTL Viewer反映的是模块之间的连接。
5、Technology Map Viewer可以直接看到FPGA内部门电路的连接。
以下图示为两种代码的Technology Map Viewer图:
以a=2'b00(即a为0)时分析,输出端q最终选择d4输出
可以看到,他们两者一致。
转:if-else和case都是有优先级的,其中case可以通过synthesis parallel_case综合约束命令取消优先级;eg:case(sel) // synthesis parallel_case
在组合逻辑中若分支没写全则都会综合出锁存器,其中case可以通过synthesis full_case综合约束命令或default来避免,而if-else必须补全才可以避免。
在FPGA开发时,在RTL view中看到if-else具有明显优先级而case却是并行的,所以很多人便认为case是并行的,if-else才是具有优先级的,其实这个结论是错的。这是因为RTLview显示的是编译后的结果,显示的图形都是调用标准单元,跟工艺库、FPGA 类型都没有关系。更准确的应该看 TechnologyMap view,此时显示的是已经编译并映射到对应的 FPGA 器件中,是布局布线后的结果。由于现在的综合工具比之前的强大很多,所以会自动进行优化,即使你用if-else写出带有优先级的电路,综合工具在分析后认为并行更合理也会综合成并行的电路,因此这两种语法在强大的综合工具面前只是2种不同的表达方式,综合结果很可能是一样的,就看你更喜欢使用哪种描述方式。
标签:case,匹配,FPGA,clk,else,电路,verilog,rst,input From: https://www.cnblogs.com/DOVI666/p/17928029.html