首页 > 其他分享 >常见verilog与电路的匹配

常见verilog与电路的匹配

时间:2023-12-26 16:22:34浏览次数:36  
标签:case 匹配 FPGA clk else 电路 verilog rst input

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

相关文章

  • FPGA学习笔记---verilog学习(2)--过程块always@(*)
    在Verilog中always@(*)语句的意思是always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行。1、always语句有两种触发方式。第一种是电平触发,例如always@(aorborc),a、b、c均为变量,当其中一个发生变化时,下方的语句将被执行。2、第二种是沿触发,例如always......
  • DC电源模块如何简化电路设计
    BOSHIDADC电源模块如何简化电路设计DC电源模块是一种集成了直流电源电路的模块,可以提供稳定的直流电源输出。使用DC电源模块可以简化电路设计,具体步骤如下:1.选择合适的DC电源模块:根据电路所需的电压和电流要求,选择合适的DC电源模块。通常,DC电源模块有不同的输出电压和电流等级可......
  • 35.基于图像匹配的自动化测试
    图像匹配的自动化测试介绍技术价值与用途解决特殊场景的自动化测试问题不可识别控件,自定义控件、图片控件、滑块安全性较高控件,比如安全键盘特殊渲染引擎,比如游戏app作为常规自动化测试的补充图像识别速度较慢游戏控件通过自定义可以实现控件识别基......
  • Halon 模板匹配流程
    读取图片read_image灰度筛选threshold面积筛选select_shape分区connection膨胀(填充缝隙)dilation_circle勾画边缘(轮廓)gen_contour_region_xld建立轮廓模型create_scaled_shape_model_xld(Contours,‘auto’,rad(0),rad(360),‘auto’,0.8,1.1,‘auto’,‘auto’,‘......
  • 【CUMT计算机系统设计】Verilog语法概览
    基操标识符区分大小写,逻辑值不区分首字符必须为字母/下划线1. 模块Module有I/O功能的黑盒2.逻辑块always构建组合and时序逻辑块:if,case,for...always@(...)begin……end上升沿posedge下降沿negedgegenerate主要结合for:对向量......
  • 数字电路、数制与码制
    一、数字电路1、分类1)用途来分:1、IC产品2、微处理器(MPU)3、面向特定用途的IC产品2)结构分1、立元器电路2、集成电路3)电路所用元器件的不同1、双极型电路2、单极型电路4)按逻辑功能分1、组合逻辑电路2、时序逻辑电路二、数制和码制1、基数:计数制中用到的数码的个数,常用R表......
  • 模拟集成电路设计系列博客——4.4.5 基于自适应滤波的修调
    4.4.5基于自适应滤波的修调自适应滤波一般用于数字信号处理应用中,例如模型观察,通道均衡,或者噪声消除。同时也可以使用自适应滤波技术来修调一个给定场景中的连续时间滤波器。一个实现的例子可以参考下图[Kozma,1991]:其中自适应修调电路被用于最小化误差信号。在进行修调时,输......
  • 模拟集成电路设计系列博客——4.4.4 Q因子修调
    4.4.4Q因子修调在一些需要高速或者高度选择的滤波器中,非理想的积分器效应和寄生参数使得电路需要对积分器的极点进行Q因子修调。尽管我们之前讨论过如何通过修调单独的时间常数使得集成滤波器的的因子达到百分之1以内的误差,当\(Q>1\)时,即使Q因子上有微小的误差也可能会在滤波器......
  • Spring工具类--路径匹配(AntPathMatcher)--使用/实例
    原文网址:Spring工具类--路径匹配(AntPathMatcher)--使用/实例_IT利刃出鞘的博客-CSDN博客简介整个Spring(SpringBoot)框架的路径解析都是按照Ant的风格来的,比如:Controller的请求路径、文件路径、包的路径。所以,掌握Ant的路径匹配很重要。Spring中的具体实现:org.springframewor......
  • 模拟集成电路设计系列博客—— 4.4.3 频率修调
    4.4.3频率修调如果有精确的时钟的话,那么可以精确的修调\(G_m/C_A\)。例如,假设设计者有一个精确的时钟频率,称为\(f_{clk}\),那么一种使用开关电容电路进行修调的方式如下图所示[Viswanathan,1982]:这个修调电路与我们上一节介绍的固定跨导修调电路很像,除了外部电阻被更换为了一个......