This commit is contained in:
Andrew Kay
2020-06-16 16:53:53 -05:00
parent 0a03fde6f9
commit 9dd8d37ef5
4 changed files with 863 additions and 5 deletions

View File

@@ -5,7 +5,7 @@ TINYPROG ?= tinyprog
all: top.bin
top.json: top.v
top.json: top.v coax_rx_bit_timer.v
prog: top.bin
$(TINYPROG) -p top.bin

View File

@@ -47,7 +47,7 @@ module coax_rx_bit_timer(
SYNCHRONIZED:
begin
if (transition_counter < CLOCKS_PER_BIT * 1.25)
if (transition_counter < (CLOCKS_PER_BIT + (CLOCKS_PER_BIT / 4)))
next_transition_counter = transition_counter + 1;
else
next_state = UNSYNCHRONIZED;
@@ -59,13 +59,13 @@ module coax_rx_bit_timer(
else
next_bit_counter = 0;
if (rx != previous_rx && transition_counter > CLOCKS_PER_BIT / 2)
if (rx != previous_rx && transition_counter > (CLOCKS_PER_BIT / 2))
begin
next_transition_counter = 0;
next_bit_counter = CLOCKS_PER_BIT / 2;
end
if (bit_counter == CLOCKS_PER_BIT * 0.75)
if (bit_counter == ((CLOCKS_PER_BIT / 4) * 3))
sample = 1;
end
@@ -76,7 +76,7 @@ module coax_rx_bit_timer(
else
next_bit_counter = 0;
if (bit_counter == CLOCKS_PER_BIT * 0.75)
if (bit_counter == ((CLOCKS_PER_BIT / 4) * 3))
sample = 1;
end
endcase

View File

@@ -3,6 +3,13 @@
module top (
input clk_16mhz,
// Receiver
input rx,
input reset,
output sample,
output synchronized,
output usb_pu
);
// 19 MHz
@@ -23,5 +30,24 @@ module top (
.PLLOUTCORE(clk_19mhz)
);
reg rx_0 = 0;
reg rx_1 = 1;
always @(posedge clk_19mhz)
begin
rx_0 <= rx;
rx_1 <= rx_0;
end
coax_rx_bit_timer #(
.CLOCKS_PER_BIT(8)
) rx_bit_timer (
.clk(clk_19mhz),
.rx(rx_1),
.reset(reset),
.sample(sample),
.synchronized(synchronized)
);
assign usb_pu = 0;
endmodule

View File

@@ -0,0 +1,832 @@
$date
Mon Jun 15 21:59:45 2020
$end
$version
Icarus Verilog
$end
$timescale
1s
$end
$scope module coax_rx_bit_timer_tb $end
$var wire 1 ! synchronized $end
$var wire 1 " sample $end
$var reg 1 # clk $end
$var reg 1 $ reset $end
$var reg 1 % rx $end
$scope module dut $end
$var wire 1 # clk $end
$var wire 1 $ reset $end
$var wire 1 % rx $end
$var reg 4 & bit_counter [3:0] $end
$var reg 4 ' next_bit_counter [3:0] $end
$var reg 2 ( next_state [1:0] $end
$var reg 5 ) next_transition_counter [4:0] $end
$var reg 1 * previous_rx $end
$var reg 1 " sample $end
$var reg 2 + state [1:0] $end
$var reg 1 ! synchronized $end
$var reg 5 , transition_counter [4:0] $end
$upscope $end
$scope task rx_bit $end
$var reg 1 - bit $end
$upscope $end
$scope task rx_bit_custom $end
$var reg 1 . bit $end
$var reg 16 / first_half_duration [15:0] $end
$var reg 16 0 second_half_duration [15:0] $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
bx 0
bx /
x.
x-
b0 ,
b0 +
x*
b0 )
b0 (
b0 '
b0 &
0%
0$
0#
0"
0!
$end
#1
0*
1#
#2
0#
#3
1#
#4
0#
#5
1#
#6
0#
#7
1#
#8
0#
#9
1#
#10
0#
#11
1#
#12
0#
#13
1#
#14
0#
#15
1#
#16
0#
#17
1#
#18
0#
#19
1#
#20
0#
#21
1#
#22
0#
#23
1#
#24
0#
#25
1#
#26
0#
#27
1#
#28
0#
#29
1#
#30
0#
#31
1#
#32
0#
1-
#33
1#
#34
0#
#35
1#
#36
0#
#37
1#
#38
0#
#39
1#
#40
0#
b1 (
b100 '
1%
#41
b101 '
1!
b1 )
1*
b100 &
b1 +
1#
#42
0#
#43
b110 '
b10 )
1!
b101 &
b1 ,
1#
#44
0#
#45
1"
b111 '
b11 )
1!
b110 &
b10 ,
1#
#46
0#
#47
b1000 '
b100 )
1!
0"
b111 &
b11 ,
1#
#48
0#
b1000 '
b100 )
1!
0-
1%
#49
b0 '
b101 )
1!
b1000 &
b100 ,
1#
#50
0#
#51
b1 '
b110 )
1!
b0 &
b101 ,
1#
#52
0#
#53
b10 '
b111 )
1!
b1 &
b110 ,
1#
#54
0#
#55
b11 '
b1000 )
1!
b10 &
b111 ,
1#
#56
0#
b100 '
b0 )
1!
0%
#57
b101 '
b1 )
1!
0*
b100 &
b0 ,
1#
#58
0#
#59
b110 '
b10 )
1!
b101 &
b1 ,
1#
#60
0#
#61
1"
b111 '
b11 )
1!
b110 &
b10 ,
1#
#62
0#
#63
b1000 '
b100 )
1!
0"
b111 &
b11 ,
1#
#64
0#
1-
#65
b0 '
b101 )
1!
b1000 &
b100 ,
1#
#66
0#
#67
b1 '
b110 )
1!
b0 &
b101 ,
1#
#68
0#
#69
b10 '
b111 )
1!
b1 &
b110 ,
1#
#70
0#
#71
b11 '
b1000 )
1!
b10 &
b111 ,
1#
#72
0#
b100 '
b0 )
1!
1%
#73
b101 '
b1 )
1!
1*
b100 &
b0 ,
1#
#74
0#
#75
b110 '
b10 )
1!
b101 &
b1 ,
1#
#76
0#
#77
1"
b111 '
b11 )
1!
b110 &
b10 ,
1#
#78
0#
#79
b1000 '
b100 )
1!
0"
b111 &
b11 ,
1#
#80
0#
b1000 '
b100 )
1!
b1000 0
b1001 /
0.
1%
#81
b0 '
b101 )
1!
b1000 &
b100 ,
1#
#82
0#
#83
b1 '
b110 )
1!
b0 &
b101 ,
1#
#84
0#
#85
b10 '
b111 )
1!
b1 &
b110 ,
1#
#86
0#
#87
b11 '
b1000 )
1!
b10 &
b111 ,
1#
#88
0#
#89
0*
b100 &
b0 ,
1#
b101 '
b1 )
1!
0%
#90
0#
#91
b110 '
b10 )
1!
b101 &
b1 ,
1#
#92
0#
#93
1"
b111 '
b11 )
1!
b110 &
b10 ,
1#
#94
0#
#95
b1000 '
b100 )
1!
0"
b111 &
b11 ,
1#
#96
0#
#97
1*
b100 &
b0 ,
1#
b101 '
b1 )
1!
1%
b111 0
b110 /
#98
0#
#99
b110 '
b10 )
1!
b101 &
b1 ,
1#
#100
0#
#101
1"
b111 '
b11 )
1!
b110 &
b10 ,
1#
#102
0#
#103
0*
b111 &
b11 ,
1#
b1000 '
b100 )
1!
0"
0%
#104
0#
#105
b0 '
b101 )
1!
b1000 &
b100 ,
1#
#106
0#
#107
b1 '
b110 )
1!
b0 &
b101 ,
1#
#108
0#
#109
b10 '
b111 )
1!
b1 &
b110 ,
1#
#110
0#
b1000 0
b11000 /
1.
#111
b11 '
b1000 )
1!
b10 &
b111 ,
1#
#112
0#
#113
b100 '
b1001 )
1!
b11 &
b1000 ,
1#
#114
0#
#115
b101 '
b1010 )
1!
b100 &
b1001 ,
1#
#116
0#
#117
b110 '
b10 (
1!
b101 &
b1010 ,
1#
#118
0#
#119
1"
b111 '
0!
b110 &
b10 +
1#
#120
0#
#121
b1000 '
0"
b111 &
1#
#122
0#
#123
b0 '
b1000 &
1#
#124
0#
#125
b1 '
b0 &
1#
#126
0#
#127
b10 '
b1 &
1#
#128
0#
#129
b11 '
b10 &
1#
#130
0#
#131
b100 '
b11 &
1#
#132
0#
#133
b101 '
b100 &
1#
#134
0#
b101 '
1%
#135
b110 '
1*
b101 &
1#
#136
0#
#137
1"
b111 '
b110 &
1#
#138
0#
#139
b1000 '
0"
b111 &
1#
#140
0#
#141
b0 '
b1000 &
1#
#142
0#
b0 '
1$
0%
#143
b0 (
0*
b0 +
b0 &
1#
#144
0#
0$
#145
1#
#146
0#
#147
1#
#148
0#
#149
1#
#150
0#
#151
1#
#152
0#
b1 (
b100 '
b0 )
1%
#153
b101 '
1!
b1 )
1*
b100 &
b0 ,
b1 +
1#
#154
0#
#155
b110 '
b10 )
1!
b101 &
b1 ,
1#
#156
0#
#157
1"
b111 '
b11 )
1!
b110 &
b10 ,
1#
#158
0#
#159
b1000 '
b100 )
1!
0"
b111 &
b11 ,
1#
#160
0#
b100 '
b0 )
1!
0%
#161
b101 '
b1 )
1!
0*
b100 &
b0 ,
1#
#162
0#
#163
b110 '
b10 )
1!
b101 &
b1 ,
1#
#164
0#
#165
1"
b111 '
b11 )
1!
b110 &
b10 ,
1#
#166
0#
#167
b1000 '
b100 )
1!
0"
b111 &
b11 ,
1#
#168
0#
#169
b0 '
b101 )
1!
b1000 &
b100 ,
1#
#170
0#
#171
b1 '
b110 )
1!
b0 &
b101 ,
1#
#172
0#
#173
b10 '
b111 )
1!
b1 &
b110 ,
1#
#174
0#
#175
b11 '
b1000 )
1!
b10 &
b111 ,
1#
#176
0#
#177
b100 '
b1001 )
1!
b11 &
b1000 ,
1#
#178
0#
#179
b101 '
b1010 )
1!
b100 &
b1001 ,
1#
#180
0#
#181
b110 '
b10 (
1!
b101 &
b1010 ,
1#
#182
0#
#183
1"
b111 '
0!
b110 &
b10 +
1#
#184
0#
#185
b1000 '
0"
b111 &
1#
#186
0#
#187
b0 '
b1000 &
1#
#188
0#
#189
b1 '
b0 &
1#
#190
0#
#191
b10 '
b1 &
1#
#192
0#