格雷码转二进制码
二进制码转格雷码
代码如下
//gray to bin module gray2bin #(parameter ADDR_WIDTH=8)(input [ADDR_WIDTH-1:0] grayin,output [ADDR_WIDTH-1:0] binout,output reg [ADDR_WIDTH-1:0] binout1,output [ADDR_WIDTH-1:0] grayout);//调用gray2bin实现方式2的函数assign binout=gray2bin(grayin);gray2bin 实现方式1:always组合逻辑块integer j;always@(*)for(j=0;j<ADDR_WIDTH;j=j+1)binout1[j]= ^(grayin>>j);//gray2bin 实现方式2:function组合逻辑块function [ADDR_WIDTH-1:0] gray2bin ( input [ADDR_WIDTH-1:0] gray);reg [31:0] i;for(i=0; i<ADDR_WIDTH;i=i+1)gray2bin[i]=^(gray>> i);endfunction//二进制转格雷码assign grayout=binout1^(binout1>>1);endmodule
tb(sv)如下
parameter ADDR_WIDTH=4;class datarand;rand bit [ADDR_WIDTH-1:0] data;endclassmodule tb_gray2bin( );logic [ADDR_WIDTH-1:0] grayin,grayout, binout, binout1;gray2bin #(.ADDR_WIDTH(ADDR_WIDTH)) gray2bin(.grayin(grayin),.binout(binout),.binout1(binout1),.grayout(grayout));datarand dr;integer k;initialbegindr=new();for(k=0;k<30;k=k+1)begin#10assert(dr.randomize());grayin=dr.data;endendendmodule