URL
https://opencores.org/ocsvn/btcfpgaminer/btcfpgaminer/trunk
Subversion Repositories btcfpgaminer
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 1 to Rev 2
- ↔ Reverse comparison
Rev 1 → Rev 2
/btcfpgaminer/trunk/control.vhd
0,0 → 1,681
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
|
entity control is |
port( |
data : in std_logic_vector(7 downto 0); -- input for data version(4B), hashprevblock(32B), merklehash(32B), time(4B), target(4B), difficulty(32B) |
loaddata : in std_logic; -- loaddata = 1 for load input data |
dataout : out bit_vector ( 7 downto 0); -- output for results |
loaddataout : out bit; -- loaddataout = 1 when results are ready |
clk : in std_logic; -- master clock signal |
controlrst : in std_logic -- master reset signal |
); |
end control; |
|
architecture phy2 of control is |
|
signal md : bit_vector (31 downto 0) := (others => '0'); |
signal v : bit := '0'; |
signal m : bit_vector ( 31 downto 0) := (others => '0'); |
signal ld : bit := '0'; |
signal init : bit := '0'; |
signal rst : std_logic := '0'; |
signal hash : bit_vector (255 downto 0) := (others => '0'); |
signal cmphash : bit_vector (255 downto 0) := (others => '0'); |
signal reset : bit := '0'; |
signal resethash : bit := '0'; |
signal pom : bit := '0'; |
signal start : bit := '0'; |
signal start2 : bit := '0'; |
signal difficulty : bit_vector (255 downto 0) := (others => '0'); |
signal cmpstart : bit := '0'; |
signal loaded : bit := '0'; |
signal output : std_logic := '0'; |
signal output_slow : std_logic := '0'; |
signal clkreset : std_logic := '0'; |
signal stop : std_logic := '0'; |
signal ntime : bit_vector (31 downto 0) := (others => '0'); |
signal ntime_max : bit_vector (31 downto 0) := (others => '0'); |
signal sendend : std_logic := '0'; |
signal nonce_out : bit_vector (31 downto 0) := (others => '0'); |
signal ntime_out : bit_vector (31 downto 0) := (others => '0'); |
|
signal data1 : bit_vector (31 downto 0) := (others => '0'); |
signal data2 : bit_vector (31 downto 0) := (others => '0'); |
signal data3 : bit_vector (31 downto 0) := (others => '0'); |
signal data4 : bit_vector (31 downto 0) := (others => '0'); |
signal data5 : bit_vector (31 downto 0) := (others => '0'); |
signal data6 : bit_vector (31 downto 0) := (others => '0'); |
signal data7 : bit_vector (31 downto 0) := (others => '0'); |
signal data8 : bit_vector (31 downto 0) := (others => '0'); |
signal data9 : bit_vector (31 downto 0) := (others => '0'); |
signal data10 : bit_vector (31 downto 0) := (others => '0'); |
signal data11 : bit_vector (31 downto 0) := (others => '0'); |
signal data12 : bit_vector (31 downto 0) := (others => '0'); |
signal data13 : bit_vector (31 downto 0) := (others => '0'); |
signal data14 : bit_vector (31 downto 0) := (others => '0'); |
signal data15 : bit_vector (31 downto 0) := (others => '0'); |
signal data16 : bit_vector (31 downto 0) := (others => '0'); |
signal data17 : bit_vector (31 downto 0) := (others => '0'); |
signal data18 : bit_vector (31 downto 0) := (others => '0'); |
signal data19 : bit_vector (31 downto 0) := (others => '0'); |
signal data20 : bit_vector (31 downto 0) := X"00000000";--(others => '0'); -- nonce (32bitu) |
signal data21 : bit_vector (31 downto 0) := X"00000080"; -- padding |
signal data22 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data23 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data24 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data25 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data26 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data27 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data28 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data29 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data30 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data31 : bit_vector (31 downto 0) := X"00000000"; -- padding |
signal data32 : bit_vector (31 downto 0) := X"80020000"; -- padding |
|
begin |
|
-- sha256 unit |
hashsha256: entity work.sha256 |
port map( |
m => m, -- input data for hash (16*32 bits = 512bits) |
init => init, -- init signal |
ld => ld, -- load signal (ld = 1 for loading 256 bits, after ld = 0) |
md => md, -- result hash 8*32 bits (256bits) |
v => v, -- output signal = hash is ready |
clk => CLK, |
rst => rst |
); |
|
rst <= to_stdulogic(resethash); |
|
-- load hash from sha256 unit |
loadhash: process(clk,reset,controlrst,sendend,stop,loaded) |
variable cnt_in : integer := 0; |
variable cnt_in2 : integer := 0; |
variable final : integer := 0; |
variable complete : integer := 0; |
|
begin |
if ((clk = '1') and clk'event) then |
|
pom <= '0'; |
cmpstart <= '0'; |
|
if ((controlrst = '1') or (reset = '1') or ((stop = '1') and (loaded = '0'))) then |
cnt_in := 0; |
cnt_in2 := 0; |
final := 0; |
end if; |
|
if((v = '1') and (complete = 1)) then |
cnt_in2 := cnt_in2+1; |
complete :=0; |
cmpstart <= '1'; |
elsif ((v = '1') and (final = 0)) then |
final := 1; |
elsif ((v = '1') and (final = 1)) then |
cnt_in := cnt_in+1; |
final := 0; |
complete :=1; |
end if; |
|
|
if (cnt_in > 0) then |
|
CASE cnt_in IS |
WHEN 2 => hash(255 downto 224) <= md; |
WHEN 3 => hash(223 downto 192) <= md; |
WHEN 4 => hash(191 downto 160) <= md; |
WHEN 5 => hash(159 downto 128) <= md; |
WHEN 6 => hash(127 downto 96) <= md; |
WHEN 7 => hash(95 downto 64) <= md; |
WHEN 8 => hash(63 downto 32) <= md; |
WHEN 9 => hash(31 downto 0) <= md; |
when others => |
END CASE; |
|
if((cnt_in = 9) and (complete = 1)) then |
pom <= '1'; |
end if; |
|
cnt_in:=cnt_in+1; |
end if; |
|
if (cnt_in2 > 0) then |
|
CASE cnt_in2 IS |
WHEN 2 => cmphash(255 downto 224) <= md; |
WHEN 3 => cmphash(223 downto 192) <= md; |
WHEN 4 => cmphash(191 downto 160) <= md; |
WHEN 5 => cmphash(159 downto 128) <= md; |
WHEN 6 => cmphash(127 downto 96) <= md; |
WHEN 7 => cmphash(95 downto 64) <= md; |
WHEN 8 => cmphash(63 downto 32) <= md; |
WHEN 9 => cmphash(31 downto 0) <= md; |
when others => |
END CASE; |
|
cnt_in2:=cnt_in2+1; |
end if; |
end if; |
end process; |
|
-- process sets control signals |
setsignals: process(clk,reset,loaded,start2,controlrst,stop) |
variable cnt : integer := 0; |
variable rstcnt : integer := 0; |
variable complete : integer := 0; |
variable final : integer := 0; |
variable resetoff : integer := 0; |
|
begin |
if ((clk = '1') and clk'event) then |
|
ld <= '0'; |
init <= '0'; |
resethash <= '0'; |
|
if ((controlrst = '1') or ((stop = '1') and (loaded = '0'))) then |
cnt := 0; |
final := 0; |
resethash <= '1'; |
else |
|
if(cnt > 0) then |
cnt := cnt+1; |
end if; |
|
if((loaded = '1') and (cnt = 0)) then |
cnt := 1; |
resetoff := 1; |
end if; |
|
if(resetoff = 1) then |
resethash <= '0'; |
else |
resethash <= '1'; |
end if; |
|
if (reset = '1') then |
cnt := 1; |
final := 0; |
end if; |
|
if((cnt > 0) and (cnt < 17)) then |
ld <= '1'; |
end if; |
|
if((v = '1') and (complete = 1)) then |
complete :=0; |
rstcnt := rstcnt+1; |
elsif ((v = '1') and (final = 0)) then |
final := 1; |
elsif ((v = '1') and (final = 1)) then |
rstcnt := rstcnt+1; |
final := 0; |
complete :=1; |
end if; |
|
if(rstcnt > 0 and (rstcnt < 10)) then |
rstcnt := rstcnt+1; |
end if; |
|
if((rstcnt = 10) and (start2 = '1') and (complete = 0)) then |
reset <= '1'; |
resethash <= '1'; |
rstcnt := 11; |
elsif((rstcnt = 10) and (start2 = '0') and (complete = 0)) then |
resethash <= '1'; |
reset <= '1'; |
elsif((rstcnt = 11) and (complete = 0)) then |
reset <= '0'; |
rstcnt := 0; |
end if; |
|
if((rstcnt = 10) and (complete = 1)) then |
reset <= '1'; |
resethash <= '1'; |
rstcnt := 11; |
elsif((rstcnt = 11) and (complete = 1)) then |
reset <= '0'; |
rstcnt := 0; |
end if; |
|
if(cnt = 1) then |
init <= '1'; |
end if; |
|
if ((cnt > 75) and (cnt < 92)) then |
ld <= '1'; |
end if; |
end if; |
end if; |
end process; |
|
-- load data to sha256 unit |
loadhashdata: process(CLK,pom,loaded,reset,start,controlrst,stop) |
variable cnt1 : integer := 0; |
variable cnt2 : integer := 0; |
variable settime : integer := 0; |
begin |
if((clk = '1') and clk'event) then |
|
if((controlrst = '1') or (reset = '1') or ((stop = '1') and (loaded = '0'))) then |
cnt1:=0; |
cnt2:=0; |
settime := 0; |
end if; |
|
if((loaded = '1') and (cnt1 = 0)) then |
cnt1:= 1; |
end if; |
|
if(start = '1') then |
cnt1:= 1; |
end if; |
|
if (pom = '1') then |
cnt2 := 1; |
end if; |
|
if ((cnt1 > 0) and (cnt1 < 92)) then |
|
C2: case cnt1 is |
when 1 => m <= data1; |
when 2 => m <= data2; |
when 3 => m <= data3; |
when 4 => m <= data4; |
when 5 => m <= data5; |
when 6 => m <= data6; |
when 7 => m <= data7; |
when 8 => m <= data8; |
when 9 => m <= data9; |
when 10 => m <= data10; |
when 11 => m <= data11; |
when 12 => m <= data12; |
when 13 => m <= data13; |
when 14 => m <= data14; |
when 15 => m <= data15; |
when 16 => m <= data16; |
|
|
when 76 => m <= data17; |
when 78 => m <= data19; |
when 79 => m <= data20; |
when 80 => m <= data21; |
when 81 => m <= data22; |
when 82 => m <= data23; |
when 83 => m <= data24; |
when 84 => m <= data25; |
when 85 => m <= data26; |
when 86 => m <= data27; |
when 87 => m <= data28; |
when 88 => m <= data29; |
when 89 => m <= data30; |
when 90 => m <= data31; |
when 91 => m <= data32; |
when others => |
end case C2; |
|
|
if((cnt1 = 77) and (settime = 0)) then |
m <= data18; |
settime := 1; |
elsif((cnt1 = 77) and (settime = 1)) then |
m <= ntime; |
end if; |
|
cnt1 := cnt1+1; |
end if; |
|
if ((cnt2 > 0) and (cnt2 < 18)) then |
|
CASE cnt2 IS |
WHEN 1 => m <= hash(255 downto 224); |
WHEN 2 => m <= hash(223 downto 192); |
WHEN 3 => m <= hash(191 downto 160); |
WHEN 4 => m <= hash(159 downto 128); |
WHEN 5 => m <= hash(127 downto 96); |
WHEN 6 => m <= hash(95 downto 64); |
WHEN 7 => m <= hash(63 downto 32); |
WHEN 8 => m <= hash(31 downto 0); |
WHEN 9 => m <= X"80000000"; |
WHEN 10 => m <= X"00000000"; |
WHEN 11 => m <= X"00000000"; |
WHEN 12 => m <= X"00000000"; |
WHEN 13 => m <= X"00000000"; |
WHEN 14 => m <= X"00000000"; |
WHEN 15 => m <= X"00000000"; |
WHEN 16 => m <= X"00000100"; |
when others => |
END CASE; |
|
cnt2 := cnt2+1; |
end if; |
end if; |
end process; |
|
-- compare computed hash with difficulty |
compare: process(CLK,cmpstart,controlrst,stop,loaded) |
variable cmpcnt : integer := 0; |
variable startcnt : integer := 0; |
variable finish : integer := 0; |
variable pomhash : unsigned(255 downto 0); |
variable diff : unsigned(255 downto 0); |
variable nonce : bit_vector(31 downto 0) := X"00000000"; |
variable one : bit_vector(31 downto 0) := X"00000001"; |
variable pom_ntime : bit_vector(31 downto 0); |
variable settime : integer := 0; |
begin |
|
if ((clk = '1') and clk'event) then |
|
output <= '0'; |
start <= '0'; |
start2 <= '0'; |
sendend <= '0'; |
|
if((controlrst = '1') or ((stop = '1') and (loaded = '0'))) then |
cmpcnt := 0; |
startcnt := 0; |
nonce_out <= X"00000000"; |
nonce := X"00000000"; |
data20 <= X"00000000"; |
ntime_out <= X"00000000"; |
settime := 0; |
end if; |
|
if(cmpstart = '1') then |
cmpcnt := cmpcnt+1; |
end if; |
|
if(cmpcnt > 0) then |
cmpcnt := cmpcnt+1; |
end if; |
|
if(startcnt > 0) then |
startcnt := startcnt+1; |
end if; |
|
if(startcnt = 80580) then |
start2 <= '1'; |
end if; |
|
if(startcnt = 80581) then |
start <= '1'; |
startcnt := 0; |
end if; |
|
if(cmpcnt = 10) then |
if(settime = 0) then |
ntime <= data18; |
settime := 1; |
end if; |
|
if(cmphash <= difficulty) then |
|
nonce_out <= data20; |
ntime_out <= pom_ntime; |
|
if((nonce = X"ffffffff") and (ntime = ntime_max)) then |
if(finish = 0) then |
sendend <= '1'; |
output <= '1'; |
finish := 1; |
end if; |
elsif(nonce = X"ffffffff") then |
nonce := X"00000000"; |
if(ntime < ntime_max) then |
pom_ntime := to_bitvector(std_logic_vector(unsigned(to_stdlogicvector(ntime)) + X"00000001")); |
ntime <= pom_ntime; |
end if; |
end if; |
|
cmpcnt := 0; |
nonce := to_bitvector(std_logic_vector(unsigned(to_stdlogicvector(data20(31 downto 0))) + unsigned(to_stdlogicvector(one)))); |
data20(31 downto 0) <= nonce; |
output <= '1'; |
startcnt := 1; |
|
else |
|
if((nonce = X"ffffffff") and (ntime = ntime_max)) then |
output <= '0'; |
elsif(nonce = X"ffffffff") then |
nonce := X"00000000"; |
if(ntime < ntime_max) then |
pom_ntime := to_bitvector(std_logic_vector(unsigned(to_stdlogicvector(ntime)) + X"00000001")); |
ntime <= pom_ntime; |
end if; |
end if; |
|
cmpcnt := 0; |
nonce := to_bitvector(std_logic_vector(unsigned(to_stdlogicvector(data20(31 downto 0))) + unsigned(to_stdlogicvector(one)))); |
data20(31 downto 0) <= nonce; |
output <= '0'; |
startcnt := 1; |
end if; |
end if; |
end if; |
end process; |
|
-- load input data version(4B), hashprevblock(32B), merklehash(32B), time(4B), target(4B), difficulty(32B) |
loadingdata: process(clk,loaddata,controlrst) |
variable cnt : integer := 0; |
begin |
|
if ((clk = '1') and clk'event) then |
|
if((controlrst = '1')) then |
cnt := 0; |
end if; |
|
if((loaddata = '1')) then |
cnt := cnt+1; |
|
CASE cnt IS |
-- version |
WHEN 1 => data1(31 downto 24) <= to_bitvector(data); |
WHEN 2 => data1(23 downto 16) <= to_bitvector(data); |
WHEN 3 => data1(15 downto 8) <= to_bitvector(data); |
WHEN 4 => data1(7 downto 0) <= to_bitvector(data); |
-- hashprevblock |
WHEN 5 => data2(31 downto 24) <= to_bitvector(data); |
WHEN 6 => data2(23 downto 16) <= to_bitvector(data); |
WHEN 7 => data2(15 downto 8) <= to_bitvector(data); |
WHEN 8 => data2(7 downto 0) <= to_bitvector(data); |
-- hashprevblock |
WHEN 9 => data3(31 downto 24) <= to_bitvector(data); |
WHEN 10 => data3(23 downto 16) <= to_bitvector(data); |
WHEN 11 => data3(15 downto 8) <= to_bitvector(data); |
WHEN 12 => data3(7 downto 0) <= to_bitvector(data); |
-- hashprevblock |
WHEN 13 => data4(31 downto 24) <= to_bitvector(data); |
WHEN 14 => data4(23 downto 16) <= to_bitvector(data); |
WHEN 15 => data4(15 downto 8) <= to_bitvector(data); |
WHEN 16 => data4(7 downto 0) <= to_bitvector(data); |
-- hashprevblock |
WHEN 17 => data5(31 downto 24) <= to_bitvector(data); |
WHEN 18 => data5(23 downto 16) <= to_bitvector(data); |
WHEN 19 => data5(15 downto 8) <= to_bitvector(data); |
WHEN 20 => data5(7 downto 0) <= to_bitvector(data); |
-- hashprevblock |
WHEN 21 => data6(31 downto 24) <= to_bitvector(data); |
WHEN 22 => data6(23 downto 16) <= to_bitvector(data); |
WHEN 23 => data6(15 downto 8) <= to_bitvector(data); |
WHEN 24 => data6(7 downto 0) <= to_bitvector(data); |
-- hashprevblock |
WHEN 25 => data7(31 downto 24) <= to_bitvector(data); |
WHEN 26 => data7(23 downto 16) <= to_bitvector(data); |
WHEN 27 => data7(15 downto 8) <= to_bitvector(data); |
WHEN 28 => data7(7 downto 0) <= to_bitvector(data); |
-- hashprevblock |
WHEN 29 => data8(31 downto 24) <= to_bitvector(data); |
WHEN 30 => data8(23 downto 16) <= to_bitvector(data); |
WHEN 31 => data8(15 downto 8) <= to_bitvector(data); |
WHEN 32 => data8(7 downto 0) <= to_bitvector(data); |
-- hashprevblock |
WHEN 33 => data9(31 downto 24) <= to_bitvector(data); |
WHEN 34 => data9(23 downto 16) <= to_bitvector(data); |
WHEN 35 => data9(15 downto 8) <= to_bitvector(data); |
WHEN 36 => data9(7 downto 0) <= to_bitvector(data); |
-- merklehash |
WHEN 37 => data10(31 downto 24) <= to_bitvector(data); |
WHEN 38 => data10(23 downto 16) <= to_bitvector(data); |
WHEN 39 => data10(15 downto 8) <= to_bitvector(data); |
WHEN 40 => data10(7 downto 0) <= to_bitvector(data); |
-- merklehash |
WHEN 41 => data11(31 downto 24) <= to_bitvector(data); |
WHEN 42 => data11(23 downto 16) <= to_bitvector(data); |
WHEN 43 => data11(15 downto 8) <= to_bitvector(data); |
WHEN 44 => data11(7 downto 0) <= to_bitvector(data); |
-- merklehash |
WHEN 45 => data12(31 downto 24) <= to_bitvector(data); |
WHEN 46 => data12(23 downto 16) <= to_bitvector(data); |
WHEN 47 => data12(15 downto 8) <= to_bitvector(data); |
WHEN 48 => data12(7 downto 0) <= to_bitvector(data); |
-- merklehash |
WHEN 49 => data13(31 downto 24) <= to_bitvector(data); |
WHEN 50 => data13(23 downto 16) <= to_bitvector(data); |
WHEN 51 => data13(15 downto 8) <= to_bitvector(data); |
WHEN 52 => data13(7 downto 0) <= to_bitvector(data); |
-- merklehash |
WHEN 53 => data14(31 downto 24) <= to_bitvector(data); |
WHEN 54 => data14(23 downto 16) <= to_bitvector(data); |
WHEN 55 => data14(15 downto 8) <= to_bitvector(data); |
WHEN 56 => data14(7 downto 0) <= to_bitvector(data); |
-- merklehash |
WHEN 57 => data15(31 downto 24) <= to_bitvector(data); |
WHEN 58 => data15(23 downto 16) <= to_bitvector(data); |
WHEN 59 => data15(15 downto 8) <= to_bitvector(data); |
WHEN 60 => data15(7 downto 0) <= to_bitvector(data); |
-- merklehash |
WHEN 61 => data16(31 downto 24) <= to_bitvector(data); |
WHEN 62 => data16(23 downto 16) <= to_bitvector(data); |
WHEN 63 => data16(15 downto 8) <= to_bitvector(data); |
WHEN 64 => data16(7 downto 0) <= to_bitvector(data); |
-- merklehash |
WHEN 65 => data17(31 downto 24) <= to_bitvector(data); |
WHEN 66 => data17(23 downto 16) <= to_bitvector(data); |
WHEN 67 => data17(15 downto 8) <= to_bitvector(data); |
WHEN 68 => data17(7 downto 0) <= to_bitvector(data); |
-- time |
WHEN 69 => data18(31 downto 24) <= to_bitvector(data); |
WHEN 70 => data18(23 downto 16) <= to_bitvector(data); |
WHEN 71 => data18(15 downto 8) <= to_bitvector(data); |
WHEN 72 => data18(7 downto 0) <= to_bitvector(data); |
-- target |
WHEN 73 => data19(31 downto 24) <= to_bitvector(data); |
WHEN 74 => data19(23 downto 16) <= to_bitvector(data); |
WHEN 75 => data19(15 downto 8) <= to_bitvector(data); |
WHEN 76 => data19(7 downto 0) <= to_bitvector(data); |
|
-- difficulty (256bits) |
WHEN 77 => difficulty(255 downto 248) <= to_bitvector(data); |
WHEN 78 => difficulty(247 downto 240) <= to_bitvector(data); |
WHEN 79 => difficulty(239 downto 232) <= to_bitvector(data); |
WHEN 80 => difficulty(231 downto 224) <= to_bitvector(data); |
WHEN 81 => difficulty(223 downto 216) <= to_bitvector(data); |
WHEN 82 => difficulty(215 downto 208) <= to_bitvector(data); |
WHEN 83 => difficulty(207 downto 200) <= to_bitvector(data); |
WHEN 84 => difficulty(199 downto 192) <= to_bitvector(data); |
WHEN 85 => difficulty(191 downto 184) <= to_bitvector(data); |
WHEN 86 => difficulty(183 downto 176) <= to_bitvector(data); |
WHEN 87 => difficulty(175 downto 168) <= to_bitvector(data); |
WHEN 88 => difficulty(167 downto 160) <= to_bitvector(data); |
WHEN 89 => difficulty(159 downto 152) <= to_bitvector(data); |
WHEN 90 => difficulty(151 downto 144) <= to_bitvector(data); |
WHEN 91 => difficulty(143 downto 136) <= to_bitvector(data); |
WHEN 92 => difficulty(135 downto 128) <= to_bitvector(data); |
WHEN 93 => difficulty(127 downto 120) <= to_bitvector(data); |
WHEN 94 => difficulty(119 downto 112) <= to_bitvector(data); |
WHEN 95 => difficulty(111 downto 104) <= to_bitvector(data); |
WHEN 96 => difficulty(103 downto 96) <= to_bitvector(data); |
WHEN 97 => difficulty(95 downto 88) <= to_bitvector(data); |
WHEN 98 => difficulty(87 downto 80) <= to_bitvector(data); |
WHEN 99 => difficulty(79 downto 72) <= to_bitvector(data); |
WHEN 100 => difficulty(71 downto 64) <= to_bitvector(data); |
WHEN 101 => difficulty(63 downto 56) <= to_bitvector(data); |
WHEN 102 => difficulty(55 downto 48) <= to_bitvector(data); |
WHEN 103 => difficulty(47 downto 40) <= to_bitvector(data); |
WHEN 104 => difficulty(39 downto 32) <= to_bitvector(data); |
WHEN 105 => difficulty(31 downto 24) <= to_bitvector(data); |
WHEN 106 => difficulty(23 downto 16) <= to_bitvector(data); |
WHEN 107 => difficulty(15 downto 8) <= to_bitvector(data); |
WHEN 108 => difficulty(7 downto 0) <= to_bitvector(data); |
when others => |
END CASE; |
end if; |
|
if((cnt = 4) and (data1 = X"73746f70")) then |
stop <= '1'; |
loaded <= '0'; |
cnt := 0; |
elsif(cnt = 108) then |
loaded <= '1'; |
cnt := 0; |
stop <= '0'; |
else |
loaded <= '0'; |
end if; |
|
if(cnt = 73) then |
ntime_max <= to_bitvector(std_logic_vector(unsigned(to_stdlogicvector(data18)) + X"00001c20")); |
end if; |
|
|
|
end if; |
end process; |
|
-- write results to output |
sendingdata: process(clk,output,controlrst,stop,loaddata) |
variable cnt : integer := 0; |
begin |
|
if ((clk = '1') and clk'event) then |
|
if((controlrst = '1') and (stop = '1')) then |
cnt := 0; |
end if; |
|
if((cnt > 0) and (busy = '0') and (loaddata = '0') and (stop = '0')) then |
cnt := cnt+1; |
loaddataout <= '1'; |
elsif((output = '1') and (cnt = 0) and (busy = '0') and (loaddata = '0') and (stop = '0')) then |
cnt := cnt+1; |
loaddataout <= '1'; |
else |
loaddataout <= '0'; |
end if; |
|
CASE cnt IS |
WHEN 1 => dataout <= nonce_out(31 downto 24); |
WHEN 2 => loaddataout <= '0'; |
WHEN 3 => dataout <= nonce_out(23 downto 16); |
WHEN 4 => loaddataout <= '0'; |
WHEN 5 => dataout <= nonce_out(15 downto 8); |
WHEN 6 => loaddataout <= '0'; |
WHEN 7 => dataout <= nonce_out(7 downto 0); |
WHEN 8 => loaddataout <= '0'; |
WHEN 9 => dataout <= ntime_out(31 downto 24); |
WHEN 10 => loaddataout <= '0'; |
WHEN 11 => dataout <= ntime_out(23 downto 16); |
WHEN 12 => loaddataout <= '0'; |
WHEN 13 => dataout <= ntime_out(15 downto 8); |
WHEN 14 => loaddataout <= '0'; |
WHEN 15 => dataout <= ntime_out(7 downto 0); |
when others => |
END CASE; |
|
if(cnt = 15) then |
cnt := 0; |
end if; |
|
end if; |
end process; |
|
end phy2; |