6、一个复位滤除毛刺的模块 复位信号持续5个周期低电平以上就再下个周期产生一个低电平信号 (1)提取验证功能点,写出transaction、interface、monitor、constraint等代码 (2)写 断言 检测波形得正确性
时间: 2024-09-19 08:00:59 浏览: 33
在电路设计中,一个复位滤除毛刺的模块用于平滑复位信号,确保信号稳定后再产生有效输出。以下是关于该模块的描述以及对应的代码实现和断言检测:
**(1)功能点提取及代码示例:**
- **交易(Transaction):** 复位信号输入RST_IN,滤除后的稳定复位信号输出RST_OUT。
- **接口(interface):**
```vhdl
entity ResetFilter is
Port (
RST_IN : in std_logic;
RST_OUT : out std_logic;
FILTERED_RST : clocked_out std_logic := 'Z'; -- 输出暂置 'Z' 状态
);
end entity ResetFilter;
```
- **监测(Monitor):**
```vhdl
architecture Behavioral of ResetFilter is
begin
PROCESS(RST_IN, FILTERED_RST_CLK)
VARIABLE count : integer range 0 to 4;
BEGIN
if rising_edge(FILTERED_RST_CLK) then
count <= count + 1;
if (count = 5) and (RST_IN = '0') then
FILTERED_RST <= '0';
count <= 0; -- 一旦满足条件,清零计数器
end if;
end if;
END PROCESS;
end Behavioral;
```
- **约束(constraint):**
```vhdl
architecture Constraint of ResetFilter is
begin
FILTERED_RST_CLK.edge_type <= rising_edge; -- 确保钟边沿是上升沿触发
FILTERED_RST_CLK.frequency <= 100_000_000; -- 假设10MHz频率
end architecture Constraint;
```
**(2)断言(assertion):**
为了检查复位滤除模块的正确性,可以编写一些测试性的VHDL断言。例如,在仿真环境中,我们可以检查`RST_OUT`何时变为有效的‘0’信号:
```vhdl
assert rst_output_stable
assert event RST_OUT'event
after 6 ns
when (FILTERED_RST = '0');
assert rst_output_not_early
assert property FILTERED_RST = '0'
before FILTERED_RST_CLK'posedge
for all time from 0 ns to 4 * 500 ps; -- 5周期,假设每个周期500ps
```
这里的断言首先确保`RST_OUT`在经过5个周期后的下一个周期变为稳定的‘0’,接着确保`RST_OUT`在有效的‘0’之前不会过早地发生。
阅读全文