OpenCores
URL https://opencores.org/ocsvn/hamming/hamming/trunk

Subversion Repositories hamming

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /hamming/branches/avendor/ham_7_4_dec
    from Rev 12 to Rev 15
    Reverse comparison

Rev 12 → Rev 15

/bench/ham_7_4_dec_tb.v
0,0 → 1,83
module stimulus(
clk,
reset,
datain,
dvin,
code,
dvout);
 
 
input dvout;
input code;
 
output clk, reset, dvin;
reg clk, reset, dvin;
 
output datain;
reg datain;
 
initial
begin
reset = 0;
#200
reset = 1;
end
 
initial clk = 1;
 
always
begin
#20
clk = !clk;
end
 
initial
begin
datain = 0;
#300
datain = 0;
#40
datain = 1;
#40
datain = 0;
#40
datain = 0;
#40
datain = 0;
#40
datain = 0;
#40
datain = 0;
#40
datain = 0;
#40
datain = 0;
 
 
 
 
end
 
initial
begin
dvin = 1;
#300
dvin = 0;
#280
dvin = 1;
end
 
initial #10000 $finish;
 
ham_7_4_dec ham_7_4_dec_0(
 
.clk(clk),
.reset(reset),
.datain(datain),
.dvin(dvin),
.code(code),
.dvout(dvout));
 
 
endmodule
 
/bench/timescale.v
0,0 → 1,83
`timescale 1ns / 100ps
/rtl/verilog/ham_7_4_dec.v
0,0 → 1,200
///
module ham_7_4_dec(
 
clk,
reset,
datain,
dvin,
dvout,
code);
 
input clk, reset, datain, dvin;
output dvout;
reg dvout;
output code;
reg code;
 
 
 
reg [6:0]
datareg;
reg [6:0]
outdatareg;
 
 
reg [2:0]
cntr,
ocntr,
scntr;
 
reg [2:0]
s_;
 
reg ocntr_en;
 
wire
and2,
and1,
and0,
xor2,
xor1,
xor0,
err;
 
assign and2 = datareg[0] & cntr[2];
assign and1 = datareg[0] & cntr[1];
assign and0 = datareg[0] & cntr[0];
 
assign xor2 = and2 ^ s_[2];
assign xor1 = and1 ^ s_[1];
assign xor0 = and0 ^ s_[0];
 
assign err = (!scntr[2])&(!scntr[1])&scntr[0];
 
/////////////////////////////////////////////////
 
 
always@(posedge clk or negedge reset)
 
if (!reset)
 
s_<=0;
 
else if (cntr==0)
 
s_<=0;
 
else if ( (!dvin)||(cntr==7) )
 
s_<={xor2,xor1,xor0};
 
/////////////////////////////////////////////////
always@(posedge clk or negedge reset)
 
if (!reset)
 
scntr<=0;
 
else if (cntr==7)
 
scntr<={xor2, xor1, xor0};
 
else if (scntr!=0)
 
scntr<=scntr-1;
 
/////////////////////////////////////////////////
 
always@(posedge clk or negedge reset)
 
if (!reset)
 
cntr<=0;
 
else if (cntr==7)
 
cntr<=0;
 
else if (!dvin)
 
cntr<=cntr+1;
 
/////////////////////////////////////////////////
 
always@(posedge clk or negedge reset)
 
if(!reset)
 
datareg<=0;
 
else if (!dvin)
 
datareg<={datareg[5:0], datain};
 
 
/////////////////////////////////////////////////
always@(posedge clk or negedge reset)
 
if (!reset)
 
ocntr<=0;
 
else if (ocntr_en)
 
ocntr<=ocntr+1;
 
 
/////////////////////////////////////////////////
always@(posedge clk or negedge reset)
 
if (!reset)
 
ocntr_en<=0;
 
else if (cntr==7)
 
ocntr_en<=1;
 
else if ( (ocntr==7)&&(cntr!=7) )
 
ocntr_en<=0;
 
/////////////////////////////////////////////////
 
always@(posedge clk or negedge reset)
 
if (!reset)
 
dvout<=1;
 
else if (ocntr==7)
 
dvout<=1;
 
else if (ocntr_en)
 
dvout<=0;
 
 
/////////////////////////////////////////////////
always@(posedge clk or negedge reset)
 
if (!reset)
 
outdatareg<=0;
 
else if (cntr==7)
 
outdatareg<=datareg;
 
else if (ocntr_en)
 
outdatareg<={outdatareg[5:0],1'b0};
 
/////////////////////////////////////////////////
always@(posedge clk or negedge reset)
 
if (!reset)
 
code<=0;
 
else
 
code<=outdatareg[6]^err;
 
/////////////////////////////////////////////////
 
 
endmodule
 
 
 
 
 
 
 
 
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.