Two coding styles (it does not matter whether these transfers are each in their own always statement or share over whole clock domain):
always @(posedge clk) a <= b ? c + d;
always @(posedge clk) b <= c - d;
always @(posedge clk) c <= 22-c;
|
always @(posedge clk) begin
a <= b ? c + d;
b <= c - d;
c <= 22-c;
end
|
Typical example (illustrating pure RT forms):
module CTR16(mainclk, din, o);
input mainclk, din;
output o;
reg [3:0] count, oldcount;
// Add a four bit decimal value of one to count
always @(posedge mainclk) begin
count <= count + 1;
if (din) oldcount <= count; // Is `if' pure ?
end
// Note ^ is exclusive-or operator
assign o = count[3] ^ count[1];
endmodule
Registers are assigned in clock domains (one shown called `mainclk').
In a stricter form of this pure RTL, we cannot use `if', so when we want a register to sometime retain its current value we must assign this explicitly, leading to forms like this:
oldcount <= (din) ? count : oldcount;
| 13: (C) 2008-13, DJ Greaves, University of Cambridge, Computer Laboratory. | Flash Player Upgrade Needed |