VHDL语法入门 (七) 包集和元件

VHDL语言中的包集和原件 这次的分享就到这里吧。我感觉这部分还挺有用的。有什么问题大家留言吧,哈哈哈哈。 阅读详情
AI摘要

文章介绍了VHDL中如何通过包集(package)来组织和复用函数、过程、类型和常量,以及元件(component)的声明和实例化,展示了层次化设计的方法,包括位置映射和名称映射,并提供了奇偶效验器和算术逻辑单元(ALU)的设计实例。,

包集和元件

元件(component),函数(function)以及过程(procedure)等部分的使用往往是为了实现常用代码的共享。这些代码一般都被放在包集(package),然后编译到目标库文件(library)中。设计者可以将自己设计的一些常用代码段添加到library中,有利于使一个复杂设计具有更加清晰的结构。

包集

除了component,function和procedure之外,package中还包括类型(type)和常量(constant)的定义

--格式
PACKAGE package_name is
    (declaration)
end package_name;
[package body package_name id
    (function和procedure描述)
end package_name;]

上面语法结构中主要包含两个部分:package和package body。第一部分是必须的,包括声明语句。如果第一部分中有一个或多个function或procedure声明,那么在package body中一定要存在对于的描述代码。package和package body的名称必须相同。

package的声明部分包括以下内容:元件,函数,过程,类型和常量说明等

library ieee;
use ieee.std_logic_1164.all;

package my_package is
    type state is(st1,st2,st3,st4);
    type color is(red,green,blue);
    constant vec: std_logic_vector(7 downto 0) := "11111111";
    function positive_edge(signal s: std_logic)return boolean;
end my_package;

package body my_package is
    function positive_edge(signal s: std_logic)return boolean is
    begin
        return(s'event and clk = '1');
    end positive_edge;
end my_package;


--调用上面的package时,需要进行如下声明
library ieee;
use work.my_package.all;

元件

一个元件(component)是一段结构完整的常用代码(包括库声明,实体和结构体这些基本组成部分)。然而,如果将这些代码声明为component,就可以被其他电路调用,从而使代码具有层次化的结构。

--元件的声明
component component_name is
    port(
        port_name: signal_mode signal_type;    
        port_name: signal_mode signal_type;    
        ...
    );
end component;


--元件实例化
label: component_name port map (port_list);

component和entity的声明格式一样,必须指出端口名称以及端口模式(in,out,buffer或inout)以及数据类型(std_logic_vector,interger和boolean等)。为了实例化元件,在元件名和端口映射声明的前面还需要加入一个符号。端口列表将元件预定义的端口和实例化时的端口关联起来。

声明一个元件有两种基本方法。一旦将元件设计完成并放到目标库中,就可以采用下图所示方法进行声明

 此外还可以使用包集的方式进行声明,可以避免每次元件实例化时都需要重复声明。

 下面将分别通过这两种方法实现如图所示电路结构

-------------------在主代码中声明元件------------------------
--------file inverter.vhd--------
library ieee;
use ieee.std_logic_1164.all;

entity inverter is
    port (a: in std_logic;
          b: out std_logic
        );
end inverter;

architecture inverter of inverter is
begin
    b <= not a;
end inverter

--------file nand_2.vhd--------
library ieee;
use ieee.std_logic_1164.all;

entity nand_2 is
    port (a,b: in std_logic;
          c: out std_logic
        );
end nand_2;

architecture nand_2 of nand_2 is
begin
    c <= not (a and b);
end and_2;

--------file nand_3.vhd--------
library ieee;
use ieee.std_logic_1164.all;

entity nand_3 is
    port (a,b,c: in std_logic;
          d: out std_logic
        );
end nand_3;

architecture nand_3 of nand_3 is
begin
    d <= not (a and b and c);
end and_3;

--------file project.vhd--------
library ieee;
use ieee.std_logic_1164.all;

entity project is
    port(a,b,c,d: in std_logic;
         x,y: out std_logic
         );
 end project;
 
 architecture structural of project is
     component inverter is
         port(a: in std_logic; b: out std_logic);
     end component;
     component nand_2 is
         port(a,b: in std_logic; c: out std_logic);
     end component;
     component nand_3 is
         port(a,b,c: in std_logic; d: out std_logic);
     end component;
     signal w: std_logic;
 begin
     u1: inverter port map(b,w);
     u2: nand_2 port map(a,b,x);
     u3: nand_3 port map(a,b,c,y);
 end structure;
 
 
 
 -------------------在包集中声明元件------------------------
 --------file inverter.vhd--------
library ieee;
use ieee.std_logic_1164.all;

entity inverter is
    port (a: in std_logic;
          b: out std_logic
        );
end inverter;

architecture inverter of inverter is
begin
    b <= not a;
end inverter

--------file nand_2.vhd--------
library ieee;
use ieee.std_logic_1164.all;

entity nand_2 is
    port (a,b: in std_logic;
          c: out std_logic
        );
end nand_2;

architecture nand_2 of nand_2 is
begin
    c <= not (a and b);
end and_2;

--------file nand_3.vhd--------
library ieee;
use ieee.std_logic_1164.all;

entity nand_3 is
    port (a,b,c: in std_logic;
          d: out std_logic
        );
end nand_3;

architecture nand_3 of nand_3 is
begin
    d <= not (a and b and c);
end and_3;

--------file nand_3.vhd--------
library ieee;
use ieee.std_logic_1164.all;

package my_component is
    component inverter is
        port(a: in std_logic; b: out std_logic);
    end component
    component nand_2 is
        port(a,b: in std_logic; c: out std_logic);
    end component
    component nand_3 is
        port(a,b,c: in std_logic; d: out std_logic);
    end component
end my_component;

--------file project.vhd--------
library ieee;
use ieee.std_logic_1164.all;
use work.my_components.all;

entity project is
    port(a,b,c,d: in std_logic;
         x,y: out std_logic
         );
 end project;
 
 architecture structural of project is
     signal w: std_logic;
 begin
     u1: inverter port map(b,w);
     u2: nand_2 port map(a,b,x);
     u3: nand_3 port map(a,b,c,y);
 end structure;

端口映射

对端口的映射有位置映射和名称映射两种方式。位置映射书写比较简单,但名称映射的方法不容易出错。对于不需要使用的端口可以使用关键词OPEN断开

--位置映射
component inverter is
    port(a: in std_logic; b: out std_logic);
end component;
...
u1: inverter port map(x,y);    --此处x,y对应a,b

--名称映射
u1: inverter port map(x => a, y => b);

--使用open断开映射
u2:my_circuit port map(x => a, y => b, w => open, z =>d);

generic参数的映射

如果元件实例化需要通过generic传递参数,那么一定需要进行generic参数的映射。此时,元件实例化的格式需要进行如下更新:

label: compon_name generic map(param.list)port map(port list);

实例

1.奇偶效验器

下面的代码实现一个通用奇偶效验产生器,当输入矢量中‘1’的数量位偶数时,在输入矢量中插入一个‘0’,当输入矢量中‘1’的个数为奇数时,则插入一个‘1’,从而使输出矢量中始终包含偶数个‘1’

 这段代码通用性较强,因为输入矢量的宽度n使generic参数,可以取任意整数。

-------------这一部分是对电路的描述,后面作为包集调用------------------
library ieee;
use ieee.std_logic_1164.all;

entity parity_gen is
    generic (n: integer := 7);    --默认矢量宽度为7,该值会在后面实例化时被覆盖
    port (input: in bit_vector(n downto 0);
          output: out bit_vector(n_1 downto 0));
end parity_gen;
  
architecture parity of parity_gen is
begin
    process(input)
        variable temp1: bit;
        variable temp2: bit_vector(output'range);
    begin
        temp1 := '0';
        for i in input'range loop
            temp1 := temp1 xor input(i);
            temp2(i) := input(i);
        end loop;
        temp2 (output'high) := temp1;
        output <= temp2;
    end process;
end parity;

-------------这一部分是对电路的引用------------------
library ieee;
use ieee.std_logic_1164.all;

entity my_code is
    generic(n: positive := 2);    --这里的2在实例化前面的电路时会覆盖默认值7
    port (inp: in bit_vector(n downto 0);
          outp: out bit_vector(n+1 downto 0));
end my_code;

architecture my_arch of my_code is
    component parity_gen is
        generic(n: positive);
        port (input: in bit_vector(n downto 0);
              output: out bit_vector(n+1 downto 0));
    end component;
begin
    c1: parity_gen genric map (n) port map (inp,outp);
end my_arch;

2.算术逻辑单元

下面代码实现了通过元件实例化设计ALU(算术逻辑单元),在这个例子中,假设文件中包含了构建ALU的3个元件:逻辑单元,算术单元和多路选择器

-------------arith_unit component------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity arith_unit is
    port(a,b: in std_logic_vector(7 downto 0 )
          sel: in std_logic_vector(2 downto 0)
          cin: in std_logic;
          x: out std_logic_vector(7 downto 0));
end arith_unit;

architecture arith_unit of arith_unit is
    signal arith, logic: std_logic_vector(7 downto 0);
begin
    with sel select
        x <= a when "000",
             a+1 when "001",
             a-1 when "010",
             b when "011",
             b+1 when "100",
             b-1 when "101",
             a+b when "110",
             a+b+cin when others;
end arith_unit;

-------------logic_unit component------------------
library ieee;
use ieee.std_logic_1164.all;

entity logic_unit is
    port(a,b: in std_logic_vector(7 downto 0);
         sel: in std_logic_vector(2 downto 0);
         x: out std_logic_vector(7 downto 0));
end logic_unit;

architecture logic_unit of logic_unit is
begin
    with sel secect
        x <= not a when "000",
             not b when "001",
             a and b when "010",
             a or b when "011",
             a nand b when "100",
             a nor b when "101",
             a xor b when " 110",
             not(a nxor b) when others;
end logic_unit;

-------------mux component------------------
library ieee;
use ieee.std_logic_1164.all;

entity mux is
    port(a, b: in std_logic_vector(7 downto 0);
         sel: in std_logic;
         x:out std_logic_vector(7 downto 0));
end mux;

architecture mux of mux is
begin
    with sel select
        x <= a when '0'
             b when others;
end mux;

-------------main code------------------
library ieee;
use ieee.std_logic_1164.all;

entity alu is
    port(a, b: in std_logic_vector(7 downto 0);
         cin: in std_logic;
         sel: in std_logic_vector(3 downto 0);
         y: out std_logic_vector(7 downto 0));
end alu;

architecture alu of alu is 
    component arith_unit is
        port (a, b: in std_logic_vector(7 downto 0);
              cin: in std_logic;
              sel: in std_logic_vector(2 downto 0);
              x: out std_logic_vector(7 downto 0));
    end component;
    component logic_unit is
        port(a,b: in std_logic_vector(7 downto 0);
             sel: in std_logic_vector(2 downto 0);
             x: out std_logic_vector(7 downto 0));
    end component;
    component mux is
        port(a,b: in std_logic_vector(7 downto 0);
             sel: in std_logic;
             x: out std_logic_vector(7 downto 0));
    end component;
    signal x1, x2: std_logic_vector(7 downto 0);
begin
    u1: arith_unit port map(a,b,cin,sel(2downto 0),x1);
    u2: logic_unit port map(a,b,sel(2 downto 0),x2);
    u3: mux port map(x1,x2,sel(3),y);
end alu;

VHDL自定义库 (程序包的使用) **记录学习,记录成长 VHDL自定义库(程序包的使用) VHDL中默认一个work库作为用户的project的设计库,用户可以通过定义PACKAGE(程序包)来定义work库中的内容。 程序号(PACKAGE)的定义分为两部分内容:包首部分和包体部分 在多个元件例化时,可将元件声明部分放在定义程序包中。通过使用该库,在调用元件时,不用再次声明元件,可直接使用库中元件。 package tes... 阅读详情

相关推荐

FPGA之道(22)VHDL基本程序框架

在介绍详细的VHDL语法之前,让我们先来了解一下VHDL代码的基本程序框架,这样可以让我们先对VHDL程序设计有一个整体的概念把握,进而在后续的VHDL语法学习中做到有的放矢。

Reborn Lee 8305

VHDL语句&基本概念

VHDL的并行语句 ①模块例化(component) 先声明在例化 ②赋值语句 ③进程语句(process) ④条件选择语句 when/else对应if/else with/select/when 对应case语句 ⑤generate语句

m0_46560857的博客 5583

VHDL语言的学习

FPGA设计语言VHDL的学习语言简述VHDL与Verilog语言对比VHDL学习资料总结 语言简述 VHDL是较早的硬件描述语句,其逻辑严谨、抽象描述能力强是其特点。但是由于语法复杂学的人也变得少了起来,致使大多数同学学习verilog语言。但是,VHDL语法依旧具有很大的市场份额,如果说一个FPGA工程师不会VHDL语言,这V绝对是一个硬伤,所以这篇文章我们将给出学习VHDL语言的详细方法。 ...

zhangningning1996的博客 4608

VHDL语言基本单元及其构成——EDA学习笔记(一)

一个相对完整的VHDL程序至少包括实体说明和实体对应的结构体两个基本组成部分。实际上,一个完整的VHDL程序应具有如下所示的比较固定的结构体,包括四个部分。 库、函数包使用说明:用于打开(调用)本设计实体将要用到的库和程序包。 实体说明:描述该设计实体与外界接口信号,是可视部分。 结构体说明:用于描述该设计实体内部工作的逻辑关系,是不可视部分。 配置说明语句:主要用于以层次化方式中对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体。 一、实体 实体(entity)是一个设计实体的.

Backlight__的博客 3931

VHDL常用语法

最后,END IF;值得注意的是,在VHDL中,process并不是一个并发语句,它并不会自动创建一个新的进程。例如,假设我们有一个名为clk的标准逻辑信号和一个名为rst的标准逻辑信号,我们想根据这两个信号的状态来设置一个名为q的标准逻辑信号。有以下九种状态:‘U’(未初始化),‘X’(不确定),‘0’(0),‘1’(1),‘Z’(高阻),‘W’(弱信号不确定),‘L’(弱信号0),‘H’(弱信号1),‘-’(不可能的情况)例如,如果a的值为’0’,b的值为’1’,那么a xor b的结果就是’1’。

Dragon_legend的博客 3819

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

VHDL快速入门

写在前面 VHDL是一门硬件语言,没学过硬件语言,挺感兴趣,还可以用在计组的实验中,花了点时间学习整理了一下VHDL的基本语法,方便查看。本blog所用到的所有图片都引用自 VHDL语言的基本语法参考文档 一、VHDL语言的基本语法 1、VHDL语言的表示符 2、VHDL的数字 2.1 数字型文字 156E2的意思是156×\times×10210^2102; 下划线可以连接数字。 2.2 数字基数表示的文字 2.3 字符串型文字 2.4 下标名及下标段名 二、VHDL语言的数据对象 .

messyking的博客 6万+

RADIOML 2018.01A数据集在自动调制识别中的实战应用指南

本文提供了RADIOML 2018.01A数据集在自动调制识别(AMR)任务中的完整实战指南。内容涵盖从数据集介绍、数据获取与解包、高效预处理流程,到构建PyTorch数据管道、模型设计(如1D CNN、ResNet)以及训练调参策略。重点阐述了如何利用该数据集训练鲁棒的AI模型,以应对复杂信道环境和低信噪比挑战,并给出了详细的性能评估方法。

plant的博客 170

VHDL中元件(模块)的例化

**记录学习,记录成长 1.VHDL中元件的例化可分为两部分 第一部分:元件声明,声明要例化的元件。 第二部分:元件例化,声明结束之后就可以对元件进行例化或者说是调用了。 其中声明部分在结构体的说明语句部分(即architecture和begin之间)。而调用部分同一个结构体的电路描述部分(即begin之后)。 2.元件声明格式: Component 元件名称 is Port(元件端口信息); E...

qq_36143127的博客 3万+

Qt开发实战:QWebEngineView缓存路径详解与自定义配置(Windows/Linux)

本文详细解析了Qt框架中QWebEngineView组件的缓存机制,提供了Windows和Linux系统下的默认缓存路径及自定义配置方案。通过实战代码示例,展示了如何实现跨平台缓存路径管理、权限设置以及企业级应用中的多用户隔离策略,帮助开发者有效管理Web内容缓存,提升应用性能和数据安全性。

weixin_42519826的博客 403

手把手教你用UNI-MOL进行分子性质预测:从3D构象到实战结果

本文提供了使用UNI-MOL进行分子性质预测的完整实战指南。通过详细的环境搭建、3D构象生成、模型加载与微调步骤,手把手教你构建端到端的预测流水线。文章重点解析了如何利用UNI-MOL的3D分子表示学习能力,超越传统2D方法,实现对溶解度、活性等性质的更精准预测,并探讨了结果解读与模型分析方法。

weixin_29164091的博客 116

VHDL重点语法全解

今天看到一篇博文,将VHDL语法基本包括了,先转过来备忘:VHDL基本点【精解】 VHDL描述硬件实体 结构 举例 Entity()实体 Enitiy 实体名 is PORT(端口名1,端口名N:方向:类型) [端口说明] End Entity; Port的方向有: IN , OUT, INOUT, BUFFER, L...

Reborn Lee 3万+

在安装之后使用labelme出现qtpy.PythonQtError:No Qt bindings could be found错误

我在base环境(python3.7)可成功安装和使用labelme,而在同py37版本和py36的虚拟环境中可安装labelme包,但在使用的时候出现报错,如下: 我尝试着去解决第一个错误提示,错误提示为:moduleNotFoundError:No module named ‘PySide’,结果掉入了一个无止无尽的坑,看到网上有朋友说这个只能在py27-py35才能安装,还有说需要VC+ 140等,他们说的这个解决方案只针对于这个缺包的描述,而我们仅仅只需要一个labelme,因此我直接对后面的错误

qq_33538651的博客 9814

VHDL元件例化

课设又要用到VHDL了,自学了一下元件例化,还是比较简单的 正文开始 一、写好需要用到的元件 这里我用一个简单的12进制计数器和7段数码管显示程序 -------------------------12进制计数器------------------------------------------------- LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; U...

qq_40033089的博客 1万+

3.1使用Python读取excel的二维数据

要使用 Python 读取 Excel 的二维数据,可以使用 openpyxl 或 pandas 库。

kenshin1980的专栏 1031

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

VHDL语法学习

一、VHDL语言程序的基本结构 完整的VHDL语言程序包含实体(Entity)、构造体(Architercture)、配置(Configuration)、包集合(Package)和库(Library)五部分。其中,实体是用来描述设计系统的外部接口;构造体用于描述系统内部的结构和行为;包集合存放共享的数据类型、常数和子程序等;配置用于从库中选取所需单元来组成系统设计的不同版本;库存放已经编译的实体、构造体、包集合和配置。 1.1 实体 实体 .................................

qq_43425438的博客 1万+

Python 安装 PyTorch(GPU)详细教程

本章教程,介绍如何安装PyTorch GPU版本的具体教程。

猿小白的博客 1613

VHDL入门

VHDL入门学习-程序组成 一个完整的VHDL程序是以下五部分组成的: 1.库(LIBRARY):比较好理解,调用系统已有的库,WORK库就是用户当前编辑文件所在的文件夹, IEEE库:由IEEE(美国电子电机工程师学会)制定的标准库 LPM库 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.math_real.all; use IEEE.s...

zhao_hong_liang的博客 5958

深入浅出SCSI子系统(一)Linux 内核中的 SCSI 架构

scsi系统

sinat_37817094的博客 6488

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VHDL的元件例化

VHDL的元件例化元件声明元件例化三种关联方式两种调用方式生成语句 元件声明 COMPONENT 元件名 [GENERIC<参数说明>;] PORT<端口说明>; END COMPONENT; 元件例化 三种关联方式 1.位置关联 这种方式中,信号要放在原件定义中所对应的位置上。 元件名 port map(信号1, 信号2, ……); 2.名字关联 信号关联式形如: a => a1 意思是将元件的引脚a与调用该元件的端口a1相关联。这种情况下,位置可以是任意的。 元件名

冷夜 4858

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VHDL语法讲解

库(Library)和包(Package); 实体(Entity)与泛型(Generics)详解; 端口(Ports)详解与语法解析; 架构(Architecture)与函数解析; 信号声明与组件实例化; constant; SDB(Self-Describing Bus)详解

waS_511的博客 2049

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VHDL入门基础

一、VHDL语言的基本语法 D触发器的VHDL实现 1、VHDL语言的表示符 2、VHDL的数字 2.1 数字型文字 156E2的意思是156 × \times × 1 0 2 10^2 102; 下划线可以连接数字。 2.2 数字基数表示的文字 2.3 字符串型文字 2.4 下标名及下标段名 downto 和 to 有什么区别 举个例子,比如要生命一个长度位8的vector的信号 Signal s1: std_logic_v...

yh13572438258的博客 2万+

VHDL学习-元件例化

在VHDL设计中,常需要将自己设计的子模块或者实体进行组合,设计复杂的数字电路。在quartus中既可以采用原理图设计方式,对设计实体进行连线,也可以采用VHDL程序实现,采用元器件例化语句。下面以一个利用两个四位加法器设计一个八位加法器的例子,介绍元件例化的方法。 如下是四位加法器的代码,实体输入为四位的a、b两个端口、上一级进位信号cin,输出为四位的运算结果s以及进位信号cout。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logi

weixin_43570886的博客 9211

VHDL语法基础掌握

第一节 数据部分 1.基本标识符: AZ,az,0~9,以及下划线:“_”。VHDL不区分大小写。标识符必须以字母开头,不能以下划线为结尾,不能出现连续的两个或多个下划线。 2.数据对象: 常量赋予值后不改变,格式: Constant 常量名:数据类型:=表达式; 变量是可以改变值的量,可以在进程和子程序中说明,可以是任意数据类型。变量的赋值是立即生效的,格式: Variable 变量名:数据类型:=初始值或表达式; 信号是电子电路内部硬件连接的抽象,可以将结构体中分离的并行语句连接起来,

weixin_47323733的博客 1万+

VHDL入门基础——语法规则

VHDL入门基础——语法规则篇 们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; 全新的 KaTeX数学公式 语法; 增加了支持甘特图的mermaid语法1 功能; 增加了 多屏幕编辑 Markdown文章功能

vinyjh的博客 3861
上一篇: VHDL语法入门 (六) 状态机
下一篇: VHDL语法入门 (八) 函数和过程
EfunStudy
博客等级 码龄5年 184粉丝 31原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值