差分编码器:
module dif(clk,reset_n,in,out);
input clk;
input reset_n;
input in;
output out;
reg [1:0] o;
always @(posedge clk or negedge reset_n)
begin
if(!reset_n)
o <= 1;
else
begin
o <= in^o;
end
end
assign out = o;
endmodule
控制器:
module Controller(clk,reset_n,s,address,cp);
input clk;
input reset_n;
input cp;
input s; //相对码
output [ 4 : 0 ] address;
reg [ 4 : 0 ] address_data;
reg [ 4 : 0 ] count;
reg sign ;
always @(posedge cp)
begin
if(s==0)
count<= 5'b10000;
else if(s==1) count<=5'b00000;
sign<= 1;
end
always @(posedge clk or negedge reset_n)
begin
if(!reset_n)
address_data<=5'b00000;
else begin
if(sign==1)
begin
address_data<=count;
sign<=0;
end
address_data<=address_data+1'b1;
if(address_data==32)
address_data<=5'b00000;
end
end