首页 > 其他分享 >keep_hierarchy约束在三模冗余中的应用

keep_hierarchy约束在三模冗余中的应用

时间:2024-02-20 14:45:13浏览次数:29  
标签:clk hierarchy keep rst 三模 -- 约束

节选自《FPGA之道》

keep_hierarchy是一个综合和实现方面的约束。Xilinx的综合工具XST更倾向于平化HDL代码的层级结构,即将一级级的模块调用机制转换为一个没有子模块的超大模块,这样做的好处是能够进行更好地设计优化工作,因为平化操作去除了原有实体或模块之间的边界限制。
不过有些时候,XST的这种平化工作是我们所不希望的,这时keep_hierarchy语法便派上了用场。使用keep_hierarchy约束能够使综合工具保留指定部分的层级关系,这样一来,在后续的实现阶段也将保留这种层级关系。与此同时,也可以生成用于仿真的具有层级关系的网表。下图就很形象地说明了使用keep_hierarchy约束和不使用keep_hierarchy约束在综合及实现后的区别。

下面列举出在HDL中嵌人keep_hierarchy约束的语法:

--VHDL syntax
--第一步,先要声明keep_hierarchy约束;
attribute keep_hierarchy:string;
--第二步,为keep_hierarchy语法指定约束线网名称和属性取值;
attribute keep_hierarchy of <architecture_name>:architecture is "{TRUE | FALSE | SOFT}";
//Verilog syntax
(*KEEP_HIERARCHY=“{TRUE | FALSE | SOFT}”*)
//上述约束会作用于紧随其后调用的模块

从上述语法可以看出,keep_hierarchy约束具有三种属性值,其中false自然是不保留层级关系,而true和soft的区别就是,true会将这种约束传递给后续的实现环节,而soft则仅仅是在综合环节保留层级关系。
下面给出一个利用keep_hierarchy实现三模冗余D的示例:

三模冗余是航空、航天系统中经常用到的一种技术。简要来说,由于空间中的射线等原因,会有一定几率引起电子产品尤其是基于SRAM的FPGA发生一种称做“单粒子翻转”的效应。“单粒子翻转”即1变成0、0变成1,这样将会导致系统运行出错。因此,为了提高系统的稳定性和可靠性,人们想了很多种方法来应对空间中较为恶劣的工作环境,其中一种就是三模冗余,即通过3倍的冗余,结合3中取2的少数服从多数仲裁机制,来提高FPGA设计的抗干扰能力。

--VHDL example
--file lock.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY lock IS
    PORT (
        clk : IN STD_LOGIC;
        rst : IN STD_LOGIC;
        din : IN STD_LOGIC;
        dout : OUT STD_LOGIC
    );
END lock;
ARCHITECTURE Behavioral OF lock IS
BEGIN
    PROCESS (clk)
    BEGIN
        IF (clk'event AND clk = '1') THEN
            IF (rst = '1') THEN
                dout <= '0';
            ELSE
                dout <= din;
            END IF;
        END IF;
    END PROCESS;
END Behavioral;

--file mode3.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY mode3 IS
    PORT (
        clk : IN STD_LOGIC;
        rst : IN STD_LOGIC;
        din : IN STD_LOGIC;
        dout : OUT STD_LOGIC
    );
END mode3;
ARCHITECTURE Behavioral OF mode3 IS
    SIGNAL a, b, c : STD_LOGIC;
    COMPONENT lock
        PORT (
            clk : IN STD_LOGIC;
            rst : IN STD_LOGIC;
            din : IN STD_LOGIC;
            dout : OUT STD_LOGIC
        );
    END COMPONENT;
    ATTRIBUTE keep_hierarchy : STRING;
    ATTRIBUTE keep_hierarchy OF m0 : ARCHITECTURE IS "TRUE";
    ATTRIBUTE keep_hierarchy OF m1 : ARCHITECTURE IS "TRUE";
    ATTRIBUTE keep_hierarchy OF m2 : ARCHITECTURE IS "TRUE";
BEGIN
    m0 : lock
    PORT MAP(
        clk => clk,
        rst => rst,
        din => din,
        dout => a
    );
    m1 : lock
    PORT MAP(
        clk => clk,
        rst => rst,
        din => din,
        dout => b
    );
    m2 : lock
    PORT MAP(
        clk => clk,
        rst => rst,
        din => din,
        dout => c
    );
    -- ATTRIBUTE keep_hierarchy : STRING;
    -- ATTRIBUTE keep_hierarchy OF m0 : ARCHITECTURE IS "TRUE";
    -- ATTRIBUTE keep_hierarchy OF m1 : ARCHITECTURE IS "TRUE";
    -- ATTRIBUTE keep_hierarchy OF m2 : ARCHITECTURE IS "TRUE";
    PROCESS (clk)
    BEGIN
        IF (clk'event AND clk = '1') THEN
            IF (rst = '1') THEN
                dout <= '0';
            ELSE
                IF (b /= c) THEN
                    dout <= a;
                ELSE
                    dout <= b;
                END IF;
            END IF;
        END IF;
    END PROCESS;
END Behavioral;

采用上例这种keep_hierarchy的约束添加方式,就可以成功确保在FPGA中实现了三个功能一模一样的模块。否则,由于这三个模块在功能上面完全等价,编译器便会优化掉其中的两个,而最终只保留一个模块,但是这样就无法实现“三模冗余”的保护功能了。

标签:clk,hierarchy,keep,rst,三模,--,约束
From: https://www.cnblogs.com/radiumlrb/p/18023076

相关文章

  • ptk安装磐维(cmdb)+zookeeper+shardingsphere
    目录一、概览1.1、ShardingSphere-Proxy1.2、ShardingSphere特性二、环境准备2.1、ip规划2.2、修改主机名2.3、关闭防火墙和透明大页(所有节点)2.4配置yum,安装系统包2.5修改系统参数2.6创建omm用户和用户组及目录三、PTK安装磐维数据库(所有节点都要操作)3.1PTK介绍3.2下......
  • Apache DolphinScheduler中ZooKeeperCDH不兼容问题的解决方案
    背景看到ApacheDolphinScheduler社区群有很多用户反馈和讨论这块问题,针对不兼容的问题,不仅需要自己重新编译各一个新包,而且因为默认是使用zk-3.8的配置,所以会出现不兼容问题。使用zk-3.4配置即可适配3.4.x解决办法(一)切换到项目源码的根路径中执行mvncleanpackage-T1C-Pr......
  • MAC DOCKER Zookeeper 启动报错 mkdir /host_mnt/private/var/db/timezone/tz: operat
    在Mac电脑上启动Zookeeper和kafka的docker容器时报错一开始我的语句是这样的dockerpullwurstmeister/zookeeperdockerrun-d--restart=always--log-driverjson-file--log-optmax-size=100m--log-optmax-file=2--namezookeeper-p2181:2181-v/etc/localtime:/et......
  • curator操做zookeeper案例
    ApacheCurator客户端的使用curator与客户端的异同zk原生api的不足之处watch注册一次后就会失效不支持递归创建节点会话连接、命名空间和节点创建,递归创建,递归删除packagecom.imooc.curator;importjava.util.List;importorg.apache.curator.RetryPolicy;importorg.......
  • zookeeper虚拟机使用和java api使用zookeeper案例
    zookeeper动物园管理员中间件,提供协调服务作用于分布式系统,发挥其优势,可以为大数据服务支持java,提供java和c语言的客户端api什么是分布式系统?很多台计算机组成一个整体,一个整体一致对外并且处理同一请求内部的每台计算机都可以相互通信(rest/rpc)客户端到服务端的一次请求到......
  • [971] [Keep original formats] Combine multiple Excel files into one Excel file w
    IftheexistingExcelfilehasspecialformattingthatpreventsreadingitdirectlywithPandas,youcanusealibrarylikeopenpyxltohandletheappendingofnewsheets.Here'showyoucanachievethis:importosfromopenpyxlimportload_workbook......
  • nginx+keepalived组成高可用集群
    注意:用keepalived将多台nginx组成高可用集群时,nginx不能用docker启动1下载keepalived:yum-yinstallkeepalived2查看网卡:ipaddr,有eth0,en33这种的就是网卡名,inet后面是ip地址,一个网卡还可以绑定多个ip地址,比如给eth0网卡添加192.168.0.150ip命令:ipaddradd192.168......
  • [转]TCP的keep-alive
    TCP的keep-alive可以在不增加服务器处理逻辑的前提下,检测客户端连接是否中断/proc/sys/net/ipv4/tcp_keepalive_time开始首次KeepAlive探测前的TCP空闭时间/proc/sys/net/ipv4/tcp_keepalive_intvl两次KeepAlive探测间的时间间隔/proc/sys/net/ipv4/tcp_keepalive_probes判定......
  • centos7安装keepalived和双活主机配置
    yum安装yuminstall-ykeepalived配置文件位置/etc/keepalived/keepalived.conf这总方式安装的keepalived版本比较旧,centos7里面默认是1.3.5,是2017年的版本。需要新的版本可以考虑编译安装查看yum安装默认的版本[root@vm200~]#yuminfokeepalivedLoadedplugins:f......
  • Zookeeper快速了解
    初识ZookeeperZookeeper是ApacheHadoop项目下的一个子项目,是一个树形目录服务。Zookeeper翻译过来就是动物园管理员,他是用来管Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员。简称zkZookeeper是一个分布式的、开源的分布式应用程序的协调服务。Zookeeper提供的......