blinky
This commit is contained in:
@ -1,7 +1,57 @@
|
||||
|
||||
#[no_mangle(all)]
|
||||
entity main(clk: clock, leds: inv [bool; 4]) {
|
||||
extern entity pll(clkin: clock, init_clk: clock, clkout0: inv clock, lock: inv bool);
|
||||
|
||||
reg(clk) counter: uint<24> = counter +. 1;
|
||||
|
||||
set leds = (counter >> 20).as_bits()[0..4];
|
||||
#[no_mangle(all)]
|
||||
entity main(clk: clock, leds: inv [bool; 4], tmds_clk: inv clock, tmds: inv [bool; 3]) {
|
||||
|
||||
let (clk_pll, clk_pll_wire) = port();
|
||||
let (lock_pll, lock_pll_wire) = port();
|
||||
inst pll(clk, clk, clk_pll_wire, lock_pll_wire);
|
||||
|
||||
reg(clk_pll) counter: uint<32> = if counter == 50_000_000 { 0 } else {counter +. 1};
|
||||
reg(clk_pll) on: bool = if counter == 0 {!on} else {on};
|
||||
|
||||
|
||||
|
||||
set tmds_clk = clk_pll;
|
||||
set tmds = [false, false, false];
|
||||
|
||||
set leds = [!on, !on, !on, !lock_pll];
|
||||
}
|
||||
|
||||
|
||||
entity tdms_encoder(clk: clock, data: uint<8>) -> uint<10>
|
||||
{
|
||||
// Transition minimization
|
||||
let popcnt = data.as_bits().fold(0u4, fn |acc, val| {acc +. if val {1} else {0}});
|
||||
|
||||
let xored = data.as_bits()[1..8].fold(data.as_bits(), fn |acc, val| {
|
||||
acc.shift_front(acc[0] ^^ val)
|
||||
}).reversed();
|
||||
|
||||
let xnored = data.as_bits()[1..8].fold(data.as_bits(), fn |acc, val| {
|
||||
acc.shift_front(!(acc[0] ^^ val))
|
||||
}).reversed();
|
||||
|
||||
let use_xnor = popcnt > 1 && data.as_bits()[0] == false;
|
||||
let tm = [use_xnor].concat((if use_xnor {xnored} else {xored})).as_uint();
|
||||
|
||||
|
||||
// DISPARITY
|
||||
let ones = tm.as_bits()[0..8].fold(0u4, fn |acc, val| {acc +. if val {1} else {0}}).to_int();
|
||||
let zeroes = 8 - ones;
|
||||
|
||||
reg(clk) disparity = 0i4;
|
||||
|
||||
let invert =
|
||||
if disparity == 0 || ones == zeroes
|
||||
{
|
||||
if use_xor == true // This is a one, so we dont invert to add a zero
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user