URL
https://opencores.org/ocsvn/logicprobe/logicprobe/trunk
Subversion Repositories logicprobe
Compare Revisions
- This comparison shows the changes necessary to convert path
/logicprobe
- from Rev 4 to Rev 5
- ↔ Reverse comparison
Rev 4 → Rev 5
/trunk/tst/sim-c/lfsr128.c
0,0 → 1,50
/* |
* lfsr128.c -- a linear feedback shift register with 128 bits |
* (actually constructed from 4 instances of a 32-bit lfsr) |
*/ |
|
|
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
|
|
int main(void) { |
unsigned int startState[4] = { |
0xC70337DB, |
0x7F4D514F, |
0x75377599, |
0x7D5937A3 |
}; |
/* taps at 32 31 29 1 */ |
unsigned int taps = 0xD0000001; |
unsigned int lfsr[4]; |
int i, n; |
|
for (i = 0; i < 4; i++) { |
lfsr[i] = startState[i]; |
} |
for (n = 0; n < 530; n++) { |
/* |
* The trigger condition in the actual hardware test will be set |
* to lfsr[0]==0x7119C0CD, which is reached at n==10. Therefore |
* we print out n-10 instead of n to get identical index numbers. |
*/ |
printf("%03d: ", n - 10); |
for (i = 0; i < 4; i++) { |
printf("%02X ", (lfsr[i] >> 24) & 0xFF); |
printf("%02X ", (lfsr[i] >> 16) & 0xFF); |
printf("%02X ", (lfsr[i] >> 8) & 0xFF); |
printf("%02X ", (lfsr[i] >> 0) & 0xFF); |
} |
printf("\n"); |
for (i = 0; i < 4; i++) { |
if ((lfsr[i] & 1) == 0) { |
lfsr[i] = lfsr[i] >> 1; |
} else { |
lfsr[i] = (lfsr[i] >> 1) ^ taps; |
} |
} |
} |
return 0; |
} |
/trunk/tst/sim-c/Makefile
0,0 → 1,14
# |
# Makefile to build a simulation of the test circuit |
# |
|
all: ref |
|
ref: lfsr128 |
./lfsr128 >ref |
|
lfsr128: lfsr128.c |
gcc -Wall -o lfsr128 lfsr128.c |
|
clean: |
rm -f *~ lfsr128 ref |
/trunk/tst/sim-v/top.cfg
0,0 → 1,20
*-5.000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 |
@28 |
top.clk |
top.reset_in_n |
top.lfsr.reset |
@22 |
top.lfsr.lfsr0[31:0] |
top.lfsr.lfsr1[31:0] |
top.lfsr.lfsr2[31:0] |
top.lfsr.lfsr3[31:0] |
@28 |
top.lfsr.trigger |
top.lfsr.sample |
top.lfsr.lp.sampler.full |
@22 |
top.lfsr.lp.rdaddr[12:0] |
top.lfsr.lp.data[7:0] |
@28 |
top.lfsr.lp.ready |
top.lfsr.lp.write |
/trunk/tst/sim-v/lfsr128.v
0,0 → 1,78
// |
// lfsr128.v -- a linear feedback shift register with 128 bits |
// (actually constructed from 4 instances of a 32-bit lfsr) |
// |
|
`include "../../src/fpga/LogicProbe.v" |
`timescale 1ns/1ns |
|
module lfsr128(clk, reset_in_n, s, rs232_txd); |
input clk; |
input reset_in_n; |
output [3:0] s; |
output rs232_txd; |
|
wire reset; |
reg [3:0] reset_counter; |
|
reg [31:0] lfsr0; |
reg [31:0] lfsr1; |
reg [31:0] lfsr2; |
reg [31:0] lfsr3; |
|
wire trigger; |
wire sample; |
wire [127:0] log_data; |
|
assign reset = (reset_counter == 4'hF) ? 0 : 1; |
always @(posedge clk) begin |
if (reset_in_n == 0) begin |
reset_counter <= 4'h0; |
end else begin |
if (reset_counter != 4'hF) begin |
reset_counter <= reset_counter + 1; |
end |
end |
end |
|
always @(posedge clk) begin |
if (reset == 1) begin |
lfsr0 <= 32'hC70337DB; |
lfsr1 <= 32'h7F4D514F; |
lfsr2 <= 32'h75377599; |
lfsr3 <= 32'h7D5937A3; |
end else begin |
if (lfsr0[0] == 0) begin |
lfsr0 <= lfsr0 >> 1; |
end else begin |
lfsr0 <= (lfsr0 >> 1) ^ 32'hD0000001; |
end |
if (lfsr1[0] == 0) begin |
lfsr1 <= lfsr1 >> 1; |
end else begin |
lfsr1 <= (lfsr1 >> 1) ^ 32'hD0000001; |
end |
if (lfsr2[0] == 0) begin |
lfsr2 <= lfsr2 >> 1; |
end else begin |
lfsr2 <= (lfsr2 >> 1) ^ 32'hD0000001; |
end |
if (lfsr3[0] == 0) begin |
lfsr3 <= lfsr3 >> 1; |
end else begin |
lfsr3 <= (lfsr3 >> 1) ^ 32'hD0000001; |
end |
end |
end |
|
assign s[3] = lfsr0[27]; |
assign s[2] = lfsr1[13]; |
assign s[1] = lfsr2[23]; |
assign s[0] = lfsr3[11]; |
|
assign trigger = (lfsr0 == 32'h7119C0CD) ? 1 : 0; |
assign sample = 1; |
assign log_data = { lfsr0, lfsr1, lfsr2, lfsr3 }; |
LogicProbe lp(clk, reset, trigger, sample, log_data, rs232_txd); |
|
endmodule |
/trunk/tst/sim-v/top.v
0,0 → 1,30
// |
// top.v -- top-level module to test lfsr128 with LogicProbe |
// |
|
`include "lfsr128.v" |
`timescale 1ns/1ns |
|
module top; |
|
reg clk; |
reg reset_in_n; |
wire [3:0] s; |
wire rs232_txd; |
|
lfsr128 lfsr(clk, reset_in_n, s, rs232_txd); |
|
initial begin |
#0 $dumpfile("dump.vcd"); |
$dumpvars(0, top); |
clk = 1; |
reset_in_n = 0; |
#145 reset_in_n = 1; |
#20000 $finish; |
end |
|
always begin |
#10 clk = ~clk; |
end |
|
endmodule |
/trunk/tst/sim-v/Makefile
0,0 → 1,17
# |
# Makefile to build a simulation of the test circuit |
# |
|
all: dump.vcd |
|
show: dump.vcd |
gtkwave dump.vcd top.cfg |
|
dump.vcd: top |
./top |
|
top: top.v |
iverilog -Wall -o top top.v |
|
clean: |
rm -f *~ top dump.vcd |