LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY D_FF IS
PORT
(
D,CP:IN std_logic;--D为数据输入,CP为时钟,上升沿触发
Rd,Sd:IN std_logic; --Rd为异步复位信号,Sd为异步置位信号
Q,Qn:OUT std_logic --输出信号,是两个互补输出
);
END D_FF;
ARCHITECTURE behave OF D_FF IS
BEGIN
PROCESS(CP,Rd,Sd)
BEGIN
IF (Rd='0' AND Sd='1') THEN--功能表第一条
Q<='0';
Qn<='1';
ELSIF (Rd='1' AND Sd='0') THEN--功能表第二条
Q<='1';
Qn<='0';
ELSIF (Rd='0' AND Sd='0') THEN--功能表没有这条,要注意
Q<='X';
Qn<='X';
ELSE --功能表第四和第五条,即Rd='1' AND Sd='1'
IF (rising_edge(CP)) THEN
Q<=D;
Qn<=NOT D;
END IF;
END IF;
END PROCESS;
END behave;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY D_FF IS
PORT
(
D,CP:IN std_logic;--D为数据输入,CP为时钟,上升沿触发
Rd,Sd:IN std_logic; --Rd为异步复位信号,Sd为异步置位信号
Q,Qn:OUT std_logic --输出信号,是两个互补输出
);
END D_FF;
ARCHITECTURE behave OF D_FF IS
BEGIN
PROCESS(CP,Rd,Sd)
BEGIN
IF (Rd='0' AND Sd='1') THEN--功能表第一条
Q<='0';
Qn<='1';
ELSIF (Rd='1' AND Sd='0') THEN--功能表第二条
Q<='1';
Qn<='0';
ELSIF (Rd='0' AND Sd='0') THEN--功能表没有这条,要注意
Q<='X';
Qn<='X';
ELSE --功能表第四和第五条,即Rd='1' AND Sd='1'
IF (rising_edge(CP)) THEN
Q<=D;
Qn<=NOT D;
END IF;
END IF;
END PROCESS;
END behave;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY D_FF IS
PORT
(
D,CP:IN std_logic;--D为数据输入,CP为时钟,上升沿触发
Rd,Sd:IN std_logic; --Rd为异步复位信号,Sd为异步置位信号
Q,Qn:OUT std_logic --输出信号,是两个互补输出
);
END D_FF;
ARCHITECTURE behave OF D_FF IS
BEGIN
PROCESS(CP,Rd,Sd)
BEGIN
IF (Rd='0' AND Sd='1') THEN--功能表第一条
Q<='0';
Qn<='1';
ELSIF (Rd='1' AND Sd='0') THEN--功能表第二条
Q<='1';
Qn<='0';
ELSIF (Rd='0' AND Sd='0') THEN--功能表没有这条,要注意
Q<='X';
Qn<='X';
ELSE --功能表第四和第五条,即Rd='1' AND Sd='1'
IF (rising_edge(CP)) THEN
Q<=D;
Qn<=NOT D;
END IF;
END IF;
END PROCESS;
END behave;
这是个D触发器
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY D_FF IS
PORT
(
D,CP:IN std_logic;--D为数据输入,CP为时钟,上升沿触发
Rd,Sd:IN std_logic; --Rd为异步复位信号,Sd为异步置位信号
Q,Qn:OUT std_logic --输出信号,是两个互补输出
);
END D_FF;
ARCHITECTURE behave OF D_FF IS
BEGIN
PROCESS(CP,Rd,Sd)
BEGIN
IF (Rd='0' AND Sd='1') THEN--功能表第一条
Q<='0';
Qn<='1';
ELSIF (Rd='1' AND Sd='0') THEN--功能表第二条
Q<='1';
Qn<='0';
ELSIF (Rd='0' AND Sd='0') THEN--功能表没有这条,要注意
Q<='X';
Qn<='X';
ELSE --功能表第四和第五条,即Rd='1' AND Sd='1'
IF (rising_edge(CP)) THEN
Q<=D;
Qn<=NOT D;
END IF;
END IF;
END PROCESS;
END behave;
);
input clk;
input rst_n;
input [3:0] x;
output [3:0] y;
parameter idle=2'b00;
parameter second=2'b01;
parameter third=2'b10;
parameter forth=2'b11;
reg [1:0] state;
reg [3:0] D1;
// reg [3:0] x_in;
//reg [3:0] cnt;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
cnt<=4'b0000;
D1<=4'b1101;
state<=idle;
end
else
case(state)
idle:
begin
D1[0]<=x[3]^D1[3];
D1[1]<=D1[0];
D1[2]<=D1[1]^x[3];
D1[3]<=D1[2]^x[3];
state<=second;
end
second:
begin
D1[0]<=x[2]^D1[3];
D1[1]<=D1[0];
D1[2]<=D1[1]^x[2];
D1[3]<=D1[2]^x[2];
state<=third;
end
third:
begin
D1[0]<=x[1]^D1[3];
D1[1]<=D1[0];
D1[2]<=D1[1]^x[1];
D1[3]<=D1[2]^x[1];
state<=forth;
end
forth:
begin
D1[0]<=x[0]^D1[3];
D1[1]<=D1[0];
D1[2]<=D1[1]^x[0];
D1[3]<=D1[2]^x[0];
end
default:state<=idle;
endcase
end
assign y=D1;
endmodule
一周热门 更多>