(VUM验证学习11) 使用ahb vip对GPIO进行验证框架搭建,寄存器模型集成和测试点拆解编写

逻辑上来说,GPIO相当于一个bridge结构,需要有master端和slave端,但是这里将slave端的数据驱动放到interface里做,不单独实现slave端。

相比ahbram,验证结构没有大的变化,区别是集成了寄存器模型,没有实现scoreboard,check全部实现在seq端。

寄存器集成

寄存器模型实现

1.单个寄存器定义

// OUTENCLR寄存器定义
class reg_gpio_OUTENCLR extends uvm_reg;
	`uvm_object_utils(reg_gpio_OUTENCLR)
	
	uvm_reg_field Reserved_31_16;
	rand uvm_reg_field ENCLR;
	
	function new(string name = "reg_gpio_OUTENCLR");
		super.new(name, 32, UVM_NO_COVERAGE);
	endfunction

	virtual function void build();
		Reserved_31_16 = uvm_reg_field::type_id::create("Reserved_31_16");
		Reserved_31_16.configure(this, 16, 0, "RW", 1, 0, 1, 0, 1);
		ENCLR = uvm_reg_field::type_id::create("ENCLR");
		ENCLR.configure(this, 16, 0, "RW", 0, 0, 1, 0, 1);
	endfunction

endclass

2.寄存器模型实现

class gpio_rgm extends uvm_reg_block;
	`uvm_object_utils(gpio_rgm)

	rand reg_gpio_OUTENCLR OUTENCLR;
	......
	......
	rand reg_gpio_MASKLOWBYTE MASKLOWBYTE[8'hFF:0];
	rand reg_gpio_MASKHIGHBYTE MASKHIGHBYTE[8'hFF:0]

	uvm_reg_map map;

	function new(string name="gpio_rgm");
		super.new(name, UVM_NO_COVERAGE);
	endfunction
	
	virtual function void build();
		this.OUTENCLR = reg_gpio_OUTENCLR::type_id::create("OUTENCLR", get_full_name());
		this.OUTENCLR.configure(this, null, "");
		this.OUTENCLR.build()
		......
		......
		foreach(this.MASKLOWBYTE[i]) begin
			this.MASKLOWBYTE[i] = ral_reg_rkv_gpio_MASKLOWBYTE::type_id::create($sformatf("MASKLOWBYTE[%0d]",i),get_full_name());
			this.MASKLOWBYTE[i].configure(this, null, "");
			this.MASKLOWBYTE[i].build();
		end
		......

		this.map = create_map("map", 'h0, 4, UVM_LITTLE_ENDIAN);

		this.map.add_reg(this.OUTENCLR, `UVM_REG_ADDR_WIFTH'h0014, "RW", 0);
		......
		......

		lock_model();
	endfunction
endclass

3.adapter实现

class gpio_reg_adapter extends uvm_reg_adapter;
  `uvm_object_utils(gpio_reg_adapter)
  
  function new(string name = "gpio_r
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在前端中,可以使用JavaScript中的crypto库来进行RSA加密。不过需要注意的是,RSA加密是公钥加密,需要将公钥传输给前端,因此需要保证公钥的安全性。 以下是一个简单的示例: ```javascript const publicKey = "-----BEGIN PUBLIC KEY-----\n" + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnEs7FzJc9kOx3dXUxhLx\n" + "vum0D8dVl5kxG6w8YHn4G5sSjZy3Yx5dG5Y7QsG7OUfJ+LJz4W7vGxW+0S2LxZhl\n" + "8V7FgZI6Zy2kD8yT1hE+Kk2+7i6QpJN4f7tJh6wBQNz4C7kxJwRbB3lP6lM6Hm7n\n" + "g0sF6wE6qKb6LxjvXnK3zgizQugz1xMfNl3D4nAUXv1jTlTt7nZ+Vd0b5hL6m8N4\n" + "W5o0Lx/mh9LjO5V8g/JB6c3eW6VbXn+Z0Q7yTfMl5lP2eewZVZzv6ZmBz2gjBwUO\n" + "JZz1wJ+Ku0W5fj7kTPvh5Q4Nt3cXlZwXAzQkT2WfjvpmvWQd5rWJ8P7gqOHe9q6d\n" + "8wIDAQAB\n" + "-----END PUBLIC KEY-----"; const encrypt = new JSEncrypt(); encrypt.setPublicKey(publicKey); const password = "myPassword123"; const encryptedPassword = encrypt.encrypt(password); console.log(encryptedPassword); // 输出加密后的密码 ``` 在此示例中,我们使用了jsencrypt库来进行RSA加密。我们传入了公钥,并使用setPublicKey函数将其设置为加密器的公钥。然后,我们将密码传入encrypt.encrypt函数中,得到加密后的密码。最后,我们将加密后的密码打印到控制台中。 需要注意的是,由于RSA加密的计算量较大,因此不适合对大量数据进行加密。在实际应用中,我们通常会使用RSA加密对称加密算法(如AES)中的密钥,然后使用对称加密算法加密数据。这样可以充分利用RSA加密的安全性和对称加密算法的高效性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值