zl程序教程

您现在的位置是:首页 >  其它

当前栏目

牛客网verilog练习

练习 Verilog 牛客
2023-09-11 14:20:47 时间

奇偶校验

  在Verilog中,^运算符作为单目运算符时的功能是"按位异或",作为双目运算符时的功能是"异或"。当data_in是一个8 bit的数据时,^data_in = data_in[0] ^ data_in[1] ^ data_in[2] ^ data_in[3] ^ data_in[4] ^ data_in[5] ^ data_in[6] ^ data_in[7]。就是检查bus中1的个数是否是成对的,如果成对,按位异或的结果是偶校验的结果,所以奇校验与偶校验相反。

`timescale 1ns/1ns
module odd_sel(
	input [31:0] bus,
	input sel,
	output reg check
	);
    always@(*)begin
        if(sel == 1'b1)begin
            check <= ^bus;
        end
        else begin
            check <= ~^bus;
        end
    end
endmodule

大小端准换

module Size-side conversion
	#( parameter N = 4)
	(
		input [N-1:0] data,
		input en,
		output [N-1:0] output_data
	);
	always@(*) begin
		if(en) 
			output_data = conversion(data)
		else
			output_data = 0;
	end

	
	function  [N-1 :0] conversion;
		input [N-1:0] old_data;
		integer n;
		begin
			for(n = 0; n < N ; n = n + 1) begin
				conversion[N-1-n] = old[n];
			end
		end
	endfunction

endmodule

可综合和不可综合

综合就是EDA工具或者说综合工具把我们编写的verilog代码转化成具体电路的过程。Verilog中有很多语法,结构,过程,语句,有些是可以综合的,有些是不可以综合的,不可综合的语句或者语法通常用在testbench中,只是用来仿真验证。

有些语法结构是不能与实际硬件电路对应起来的,也就是说我们在把一个语言描述的程序映射成实际硬件电路中的结构时是不能实现的。

(1)所有综合工具都支持的结构:always,assign(wire),begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,forfunction,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter,generate。

(2)所有综合工具都不支持的结构:time,defparam $finish,fork,join,initial,delays,UDP,wait,events, real, 敏感列表中同时带有posedge和negedge 。

(3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。

operators: 各种操作符,比如+,-,&,|等等。

instantitation:实例化语句