aboutsummaryrefslogtreecommitdiffstats
path: root/src/hls/HTL.v
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2021-04-01 01:24:19 +0100
committerYann Herklotz <git@yannherklotz.com>2021-04-01 01:24:19 +0100
commit315f610b111d8d5433866fa032beac0ea29df676 (patch)
treecb0b502cfa0c316826bd14123541ab41ddf035cd /src/hls/HTL.v
parent2837868fcc427b2161b083f33d3de495f0c21bf7 (diff)
downloadvericert-315f610b111d8d5433866fa032beac0ea29df676.tar.gz
vericert-315f610b111d8d5433866fa032beac0ea29df676.zip
Add new enable interface
Diffstat (limited to 'src/hls/HTL.v')
-rw-r--r--src/hls/HTL.v28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/hls/HTL.v b/src/hls/HTL.v
index 4899671..92dc48c 100644
--- a/src/hls/HTL.v
+++ b/src/hls/HTL.v
@@ -23,7 +23,7 @@ Require compcert.common.Events.
Require compcert.common.Globalenvs.
Require compcert.common.Smallstep.
Require compcert.common.Values.
-Require compcert.lib.Integers.
+Require Import compcert.lib.Integers.
Require Import compcert.lib.Maps.
Require Import vericert.common.Vericertlib.
@@ -55,6 +55,7 @@ Record ram := mk_ram {
ram_size: nat;
ram_mem: reg;
ram_en: reg;
+ ram_u_en: reg;
ram_addr: reg;
ram_wr_en: reg;
ram_d_in: reg;
@@ -123,34 +124,35 @@ Inductive state : Type :=
(args : list value), state.
Inductive exec_ram:
- Verilog.reg_associations -> Verilog.arr_associations ->
- option ram ->
- Verilog.reg_associations -> Verilog.arr_associations ->
- Prop :=
+ Verilog.reg_associations -> Verilog.arr_associations -> option ram ->
+ Verilog.reg_associations -> Verilog.arr_associations -> Prop :=
| exec_ram_Some_idle:
forall ra ar r,
- (Verilog.assoc_blocking ra)#(ram_en r, 32) = ZToValue 0 ->
+ Int.eq (Verilog.assoc_blocking ra)#(ram_en r, 32)
+ (Verilog.assoc_blocking ra)#(ram_u_en r, 32) = true ->
exec_ram ra ar (Some r) ra ar
| exec_ram_Some_write:
- forall ra ar r d_in addr en wr_en,
- en <> ZToValue 0 ->
- wr_en <> ZToValue 0 ->
+ forall ra ar r d_in addr en wr_en u_en,
+ Int.eq en u_en = false ->
+ Int.eq wr_en (ZToValue 0) = false ->
(Verilog.assoc_blocking ra)!(ram_en r) = Some en ->
+ (Verilog.assoc_blocking ra)!(ram_u_en r) = Some u_en ->
(Verilog.assoc_blocking ra)!(ram_wr_en r) = Some wr_en ->
(Verilog.assoc_blocking ra)!(ram_d_in r) = Some d_in ->
(Verilog.assoc_blocking ra)!(ram_addr r) = Some addr ->
- exec_ram ra ar (Some r) (Verilog.nonblock_reg (ram_en r) ra (ZToValue 0))
+ exec_ram ra ar (Some r) (Verilog.nonblock_reg (ram_en r) ra u_en)
(Verilog.nonblock_arr (ram_mem r) (valueToNat addr) ar d_in)
| exec_ram_Some_read:
- forall ra ar r addr v_d_out en,
- en <> ZToValue 0 ->
+ forall ra ar r addr v_d_out en u_en,
+ Int.eq en u_en = false ->
(Verilog.assoc_blocking ra)!(ram_en r) = Some en ->
+ (Verilog.assoc_blocking ra)!(ram_u_en r) = Some u_en ->
(Verilog.assoc_blocking ra)!(ram_wr_en r) = Some (ZToValue 0) ->
(Verilog.assoc_blocking ra)!(ram_addr r) = Some addr ->
Verilog.arr_assocmap_lookup (Verilog.assoc_blocking ar)
(ram_mem r) (valueToNat addr) = Some v_d_out ->
exec_ram ra ar (Some r) (Verilog.nonblock_reg (ram_en r)
- (Verilog.nonblock_reg (ram_d_out r) ra v_d_out) (ZToValue 0)) ar
+ (Verilog.nonblock_reg (ram_d_out r) ra v_d_out) u_en) ar
| exec_ram_None:
forall r a,
exec_ram r a None r a.