diff options
author | Josh Blum <josh@joshknows.com> | 2010-10-22 16:13:35 -0700 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2010-10-22 16:13:35 -0700 |
commit | bd06eede24df80940ae93515a71e214c1feb87b8 (patch) | |
tree | 628e79254fb670e468ab7a3ff06eb74ab0367055 /fpga/usrp2/extramfifo/refill_randomizer.v | |
parent | 2ce71ded9dada93ade6f960aac0bd4c25e47456a (diff) | |
parent | f14e7eb89b09e6fc4b1619c9ec255ebad3fa2aed (diff) | |
download | uhd-bd06eede24df80940ae93515a71e214c1feb87b8.tar.gz uhd-bd06eede24df80940ae93515a71e214c1feb87b8.tar.bz2 uhd-bd06eede24df80940ae93515a71e214c1feb87b8.zip |
Merge branch 'flow_control_fpga' into flow_ctrl
Diffstat (limited to 'fpga/usrp2/extramfifo/refill_randomizer.v')
-rw-r--r-- | fpga/usrp2/extramfifo/refill_randomizer.v | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/fpga/usrp2/extramfifo/refill_randomizer.v b/fpga/usrp2/extramfifo/refill_randomizer.v new file mode 100644 index 000000000..0b30f4049 --- /dev/null +++ b/fpga/usrp2/extramfifo/refill_randomizer.v @@ -0,0 +1,66 @@ +// +// EMI mitigation. +// Process FULL flag from FIFO so that de-assertion +// (FIFO now not FULL) is delayed by a pseudo random +// value, but assertion is passed straight through. +// + + +module refill_randomizer + #(parameter BITS=7) + ( + input clk, + input rst, + input full_in, + output full_out + ); + + wire feedback; + reg full_last; + wire full_deasserts; + reg [6:0] shift_reg; + reg [6:0] count; + reg delayed_fall; + + + always @(posedge clk) + full_last <= full_in; + + assign full_deasserts = full_last & ~full_in; + + // 7 bit LFSR + always @(posedge clk) + if (rst) + shift_reg <= 7'b1; + else + if (full_deasserts) + shift_reg <= {shift_reg[5:0],feedback}; + + assign feedback = ^(shift_reg & 7'h41); + + always @(posedge clk) + if (rst) + begin + count <= 1; + delayed_fall <= 1; + end + else if (full_deasserts) + begin + count <= shift_reg; + delayed_fall <= 1; + end + else if (count == 1) + begin + count <= 1; + delayed_fall <= 0; + end + else + begin + count <= count - 1; + delayed_fall <= 1; + end + + // Full_out goes instantly high if full_in does. However its fall is delayed. + assign full_out = (full_in == 1) || (full_last == 1) || delayed_fall; + +endmodule
\ No newline at end of file |