For learning below courses and books are very helpful:
1) Online courses: Computation Structures: Parts 1, 2 and 3 - all course materials available on EdX MIT as well as MIT OCW
2) Books: a) Computer Systems: A Programmers Perspective and b) Computer Organization: Hardware/Software Interface
3) Practice Verilog HDL programming for small/medium complexity building blocks such as FIFOs, RAMs, bridges, etc using free simulators like Xilinx ISIM. Courses such as Coursera's Hardware Description Languages for FPGA Design are a good starting point. Lookup most starred repos on Github in verilog and systemverilog languages.