-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathhct74245.v
65 lines (50 loc) · 1.46 KB
/
hct74245.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// License: Mozilla Public License : Version 2.0
// Author : John Lonergan
// verilator lint_off ASSIGNDLY
// verilator lint_off STMTDLY
// verilator lint_off COMBDLY
`ifndef V_74245
`define V_74245
`timescale 1ns/1ns
module hct74245(
input dir,
input nOE,
inout tri [7:0] A,
inout tri [7:0] B
);
parameter NAME="74245";
parameter LOG=0;
// HCT typical @ 5v according to https://assets.nexperia.com/documents/data-sheet/74HC_HCT245.pdf
parameter PD_TRANS=10;
parameter PD_DIR=16;
parameter PD_OE=16;
// TRANSMISSION DELAY MODEL
logic dir_d;
logic nOE_d;
logic [7:0] A_d;
logic [7:0] B_d;
assign A= nOE_d ? 8'bzzzzzzzz :dir_d==1?'bzzzzzzzz:B_d;
assign B= nOE_d ? 8'bzzzzzzzz :dir_d==0?'bzzzzzzzz:A_d;
always @* begin
dir_d <= #(PD_DIR) dir;
nOE_d <= #(PD_OE) nOE;
A_d <= #(PD_TRANS) A;
B_d <= #(PD_TRANS) B;
end
// specify
// (A => B) = (PD_TRANS);
// (B => A) = (PD_TRANS);
// (dir *> A) = (PD_DIR);
// (dir *> B) = (PD_DIR);
// (nOE *> A) = (PD_OE);
// (nOE *> B) = (PD_OE);
// endspecify
// assign A= nOE ? 8'bzzzzzzzz :dir?8'bzzzzzzzz:B;
// assign B= nOE ? 8'bzzzzzzzz :dir?A:8'bzzzzzzzz;
if (LOG)
always @(*)
begin
$display("%9t", $time, " BUF %m (%s) : A=%8b ", NAME, A, "B=%8b ", B, "dir=%1b", dir, " nOE=%1b", nOE);
end
endmodule: hct74245
`endif