Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Detect number of bit change in one clock cycle

Status
Not open for further replies.

mpatel

Member level 4
Member level 4
Joined
Aug 25, 2005
Messages
71
Helped
10
Reputation
20
Reaction score
6
Trophy points
1,288
Location
Germany
Activity points
1,786
How can I write a VHDL code to detect the number of bit change..

For example I have 4 bit register A. The value of is A = 1100. Now it is changed to A=1010. So how can I detect how many bits are changed?

Is there a solution to detect in single clock pulse?

Thanks
 

Hi,

Please find the simple flow with verilog code

assign no_of_change = data_dly ^ data_in;

always @(posedge clk)
data_dly <= data_in;

for (i = 0; i=3; i = i+1) //it will implement the combinational logic
count = count + data_in;

this count will give you the number of changes.


Regards,
Kanags
 

Let Q(3 downto 0) be the output of shift register.

process(clk)
if (clk = '1' and clk'event)
if(A(3) = Q(3))
count <= count+1;
end if;
if(A(2) = Q(2))
count <= count+1;
end if;
if(A(1) = Q(1))
count <= count+1;
end if;
if(A(0) = Q(0))
count <= count+1;
end if;
end if;
end process;

So, finally this COUNT gives the no. of bit changes
 

you can simply XOR every delayed version of a bit with it's present value, so with every change in every bit you'll suddenly detect the change(instantaneously with just a very very tiny few delay).
now you can add the resulting bits together in one clock cycle and get the number of them.

a : signal std_logic_vector(3 downto 0)
dlyd_a : signal std_logic_vector(3 downto 0)
c : signal std_logic_vector(3 downto 0)
res: signal std_logic_vector(3 downto 0)


c<= a xor dlyd_a;

process
begin
if rising_edge(clk) then
dlyd_a <= a;
res <= c(0)+c(1)+c(2)+c(3);
end if;
end process



I'm not sure about the syntax error's but you can easily modify it yourself...
 

    mpatel

    Points: 2
    Helpful Answer Positive Rating
Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top