mirror of https://github.com/zachjs/sv2v.git
40 lines
1.1 KiB
Verilog
40 lines
1.1 KiB
Verilog
module Producer(clock, data);
|
|
parameter INIT = 0;
|
|
parameter CHUNKS = 5;
|
|
input clock;
|
|
output reg [11*CHUNKS - 1:0] data;
|
|
initial data[11*(CHUNKS - 1)+:11] = INIT;
|
|
always @(clock) begin : block_name
|
|
integer i, j;
|
|
for (i = (CHUNKS-1); i >= 0; i--) begin
|
|
for (j = 9; j >= 0; j--) begin
|
|
data[11*((CHUNKS-1)-i) + j + 1] = data[11*((CHUNKS-1)-i) + j];
|
|
end
|
|
if (i != 0)
|
|
data[11*((CHUNKS-1)-i) + 0] = data[11*((CHUNKS-1)-(i-1)) + 10];
|
|
end
|
|
data[11*(CHUNKS-1)] = ~data[11*(CHUNKS-1)];
|
|
end
|
|
endmodule
|
|
|
|
module top;
|
|
reg clock;
|
|
initial begin
|
|
clock = 1;
|
|
repeat (100)
|
|
#1 clock = ~clock;
|
|
end
|
|
|
|
wire [54:0] foo;
|
|
Producer #(.INIT(0)) p1(clock, foo);
|
|
|
|
wire [109:0] bar;
|
|
Producer #(.INIT(0), .CHUNKS(3)) p2(clock, bar[109-:33]);
|
|
Producer #(.INIT(1), .CHUNKS(1)) p3(clock, bar[76-:11]);
|
|
Producer #(.INIT(2), .CHUNKS(1)) p4(clock, bar[55+:11]);
|
|
Producer #(.INIT(3)) p5(clock, bar[54-:55]);
|
|
|
|
initial
|
|
$monitor("%d %b %b", $time, foo, bar);
|
|
endmodule
|