I just couldn't resist helping out on this one!
The correct way to describe a D flip-flop (without a reset) is:
module dflipflop(
input clk,
input d,
output reg q);
always @(posedge clk)
q <= d;
endmodule
However, this is the wrong thought process in modern digital logic design. In the old days of the 1960's through 1980's, most digital logic was reduced (hand optimized) to gates and flip-flops. Since the arrival of programmable logic, PALs, GALs, CPLDs, and FPGAs, as well as ASIC technology, tools have been developed that permit coding in higher, more abstract level, and letting the tools optimize to the lowest level, which in programmable logic is generally lookup table based cells. This abstraction is similar to writing software in C, C++, or Java and letting the compiler create the assembly and/or machine code for the CPU.
You need to think in terms of synchronous parallel signal paths. An input into your design will pass through one or more stages of registers and combinatorial expressions before the final register and output.
<input> -> <reg> -> <combinatorial expression> -> <reg> -> [<cobinatorial expression> <reg> ...] -> <output>
You do think of multiplexers, decoders, finite state machines, etc., but you code at an abstract level that describes the design's intended functional behavior, while leaving the tools room to optimize for the intended target device. In synchronous design you think about what happens between one clock cycle and the next. Do not implement asynchronous paths in your design unless you have a good reason for doing so, you know what you are doing, and you provide a good comment explaining the fact.
Doing hand optimization only obscures the code's intent by making it more difficult for you and a future reader of your code to understand what it is supposed to do as well as it may also force the tools you synthesize your design in a less than optimal manner.
Also, don't forget simulation. Learn how to use Modelsim and write testbenches.
As for the comments about academia -- I have come across many examples on the web of lecture material as well as college textbooks which clearly demonstrate a total lack of the author's or lecturer's understanding in the field of modern digital design. They will waste many pages on describing how a 7400 NAND gate is implemented by analyzing the "equivalent transistor circuit" in the datasheet, then go on to great lengths coding a netlist in Verilog to instantiate and wire up all the individual gates and registers to implement an adder or mux. When these students enter the work force, they are totally lost and need to be re-trained from scratch. A significant percentage of the faculty teaching engineering these days never built a circuit or wrote a program in their life. Worse yet, some of them will grade you poorly if you implement circuits correctly and not the way they lecture. I've been there and it was a very frustrating experience. There are exceptions, but they generally had a career in the industry or a research lab before becoming lecturers.
Fortunately, today the technology is mature and there is a great wealth of information available, much of it free as well as very capable free of charge software tools and low cost development boards from all of the top vendors.
A few links:
http://www.xilinx.com/support/documentation/application_notes/xapp143.pdfGoogle for: Xilinx Synthesis and Simulation Design Guide
http://www.altera.com/literature/hb/qts/qts_qii51007.pdf?GSA_pos=4&WT.oss_r=1&WT.oss=verilog%20designhttp://rainier2.latticesemi.com/cs.html?url=http%3A//www.latticesemi.com/lit/docs/manuals/fpga_design_guide.pdf&charset=iso-8859-1&qt=verilog+rtl+design+guide&col=faqs+public&n=1&la=enhttp://www.actel.com/documents/hdlcode_ug.pdfhttp://www.actel.com/documents/vlogsim_ug.pdfPlus all of the major vendors have tutorials, example designs, and some have free web based training.
My suggestion is to find simple example designs in your chosen FPGA that implement similar functions or interfaces that you are trying to implement, play around with them, understand what they do and why they are implemented the way they are, and go from there.
Good luck and most of all, have fun!