| @ -0,0 +1,7 @@ | |||||
| .PHONY: dlatch | |||||
| dlatch: dlatch.vhd dlatch_t.sv dlatch_f.sby | |||||
| sby -f -d work dlatch_f.sby | |||||
| .PHONY: clean | |||||
| clean: | |||||
| rm -rf work | |||||
| @ -0,0 +1,42 @@ | |||||
| library ieee; | |||||
| use ieee.std_logic_1164.all; | |||||
| use ieee.numeric_std.all; | |||||
| entity dlatch is | |||||
| generic ( | |||||
| Init : std_logic_vector(31 downto 0) := x"DEADBEEF" | |||||
| ); | |||||
| port ( | |||||
| Reset_n_i : in std_logic; | |||||
| Clk_i : in std_logic; | |||||
| Wen_i : in std_logic; | |||||
| Data_i : in std_logic_vector(15 downto 0); | |||||
| Data_o : out std_logic_vector(31 downto 0) | |||||
| ); | |||||
| end entity dlatch; | |||||
| architecture rtl of dlatch is | |||||
| begin | |||||
| process (Reset_n_i, Clk_i) is | |||||
| begin | |||||
| if (Reset_n_i = '0') then | |||||
| Data_o <= Init; | |||||
| elsif (rising_edge(Clk_i)) then | |||||
| if (Wen_i = '1') then | |||||
| Data_o(7 downto 0) <= Data_i(7 downto 0); | |||||
| Data_o(23 downto 16) <= Data_i(15 downto 8); | |||||
| end if; | |||||
| end if; | |||||
| end process; | |||||
| end architecture rtl; | |||||
| @ -0,0 +1,17 @@ | |||||
| [options] | |||||
| mode prove | |||||
| depth 20 | |||||
| # falis with multiclock disabled | |||||
| multiclock off | |||||
| [engines] | |||||
| smtbmc | |||||
| [script] | |||||
| verific -vhdl dlatch.vhd | |||||
| verific -formal dlatch_t.sv | |||||
| prep -top dlatch_t | |||||
| [files] | |||||
| dlatch.vhd | |||||
| dlatch_t.sv | |||||
| @ -0,0 +1,36 @@ | |||||
| module dlatch_t ( | |||||
| input Reset_n_i, | |||||
| input Clk_i, | |||||
| input Wen_i, | |||||
| input [15:0] Data_i, | |||||
| output [31:0] Data_o | |||||
| ); | |||||
| `define INIT_VALUE 32'hDEADBEEF | |||||
| dlatch #(.Init(`INIT_VALUE)) dlatch_i ( | |||||
| .Reset_n_i(Reset_n_i), | |||||
| .Clk_i(Clk_i), | |||||
| .Wen_i(Wen_i), | |||||
| .Data_i(Data_i), | |||||
| .Data_o(Data_o) | |||||
| ); | |||||
| reg init_state = 1; | |||||
| always @(*) | |||||
| if (init_state) assume (!Reset_n_i); | |||||
| always @(posedge Clk_i) | |||||
| init_state = 0; | |||||
| always @(*) | |||||
| if (!Reset_n_i) assert (Data_o == `INIT_VALUE); | |||||
| endmodule | |||||