VHDL语言基础-Testbech
目录
VHDL仿真概述:
基本结构:
VHDL一般仿真过程:
仿真测试平台文件:
编写测试平台文件的语言:
一个测试平台文件的基本结构如下:
测试平台文件包含的基本语句:
产生激励信号的方式:
时钟信号:
复位信号:
周期信性信号:
使用延迟DELAYD:
一般的激励信号:
动态激励信号:
使用测试矢量:
测试平台文件:
定义所测试元件的VHDL程序,该程序是一个简单的Mealy型状态机演示程序:
仿真响应:
控制仿真:
断言语句(ASSERT):
文件I/O的读写:
从文件加载数据或将数据存储到文件中:
定义文件:
打开文件:
定义文件句柄后就可以在程序中打开指定文件,同时指定打开模式。
读写文件:
关闭文件:
VHDL’93标准包括如下重要的文件I/O操作子程序:
VHDL仿真概述:
VHDL仿真器,如modelsim,需要以下输入
设计的描述(项目的VHDL程序)
驱动设计的激励
在VHDL本身是自激励时则无需此输入
基本结构:
VHDL一般仿真过程:
仿真测试平台文件:
测试平台文件:
定义:可以用来验证所设计的硬件模型的正确性的VHDL模型。
作用:为所测试的原件提供了激励信号,仿真结果可以以波形的方式显示或存储测试结果到文件中。
激励信号:
可以直接集成在测试平台文件中,也可以从外部文件中加载。
编写测试平台文件的语言:
一个测试平台文件的基本结构如下:
测试平台文件包含的基本语句:
实体的定义语句
不需要定义端口,只和被测试元件(DUT)通过内部信号相连接
所测试元件的例化语句
产生时钟信号语句
产生激励源语句
产生激励信号的方式:
以一定的离散时间间隔产生激励信号
基于实体的状态产生激励信号
下面通过实例,讲述激励信号的产生
时钟信号:
一个周期性的激励信号可以使用一个并行的信号赋值语句来建立;
例如下面的语句即是建立周期为40ns的信号。
A <= not A after 20 ns; --产生一个周期为40ns的信号A
其对应的时钟波形如下图:时钟信号是同步设计中最重要的信号之一。它既可以使用并行的信号赋值语句产生(如上面的语句),也可以使用时钟产生的进程来实现定义。当使用并行的信号赋值语句时,产生的时钟信号可以是对称的或不对称的,但是信号的初始值不能为‘u’
如果使用进程来定义信号,也可以产生各种时钟信号,包括对称和不对称的。在大部分情况下,时钟信号是一直运行的,并且是对称的。当定义不对称的时钟信号,如果使用并行信号幅值语句,则需要使用条件信号赋值语句;如果使用进程,则比较简单,使用顺序逻辑就可以。下面语句使用条件信号赋值语句,定义了一个25%占空比的时钟信号:
W_CLK <= '0' after PERIOD/4 when W_CLK = '1' else
'1' after 3*PERIOD/4 when W_CLK = '0' else
'0';
上述两个对称和不对称的时钟信号,也可以使用进程来定义,如下:
复位信号:
实现方式
使用并行赋值语句
在进程中设定
例如下面复位信号设置:仿真开始时,复位信号为’0’;经过20ns后,复位信号变为’1’;再经过20ns后,复位信号变为’0’。
RESET <= '0', '1' after 20 ns, '0' after 40 ns;
再例如另一个复位信号设置实例,代码如下:
RESET <= '0', '1' after 100 ns, '0' after 180 ns, '1' after 210 ns;
RESET信号初始为’0’,经过100ns后,变为’1’;再经过80ns,该信号变为’0’;再经过30ns,该信号返回到’1’。其波形如下:
周期信性信号:
可以在进程中使用信号赋值语句实现信号的周期性信号设置。
上例定义了两个周期性信号,为了实现信号的周期性变化,后面使用一个WAIT语句。其波形如下:
使用延迟DELAYD:
可使用预定义属性DELAYD关键词来产生信号。如果已经产生了一个时钟信号,在这个时钟信号的基础上,可以使用DELAYD来使已经产生的时钟信号延迟一定的时间,从而获得另一个时钟信号。
假如我们已经使用如下的语句定义了一个时钟信号W_CLK:
W_CLK <= '1' after 30 ns when W_CLK = '0' else
'0' after 20 ns;
然后可以使用如下的延迟语句获得一个新的时钟信号DLY_W_CLK,它比W_CLK延迟了10ns:
DLY_W_CLK <= W_CLK'DELAYED(10 ns);
以上两个时钟信号波形如下:
一般的激励信号:
所定义的普通的激励信号来用作模型的输入信号;
通常在进程中定义;
一般使用WAIT语句来定义。
例如下面的激励信号定义:
其波形如下:
动态激励信号:
动态激励信号,就是被仿真的实体(DUT)的行为模型相关,即DUT的输入激励信号受模型的行为所影响。
如下信号的定义,模型的输入信号Sig_A和模型输出信号Count相关。
使用测试矢量:
将一组固定的输入输出矢量值存储在一个常量表或一个ascii文件中,然后将这些值应用到输入信号从而产生激励信号;
矢量的值序列可以使用多维数组或使用多列记录来描述。
如下面的数据表存储了输入矢量:
假设所测试的实体(DUT)具有4个输入:A、B、C和D信号,如果以一般的时间间隔应用测试矢量,则可以使用一个GENERATE语句,例:
如果将信号应用于任意时间间隔,则需要使用并行的信号赋值语句产生多个信号的波形;使用这种方法可以将一个矢量赋值给多个信号,例如下面的代码:
测试平台文件:
时钟周期为20ns,在一个时钟波形产生进程中定义。激励信号波形在另一个进程中产生。实体为一个空实体,没有输入输出信号端口。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY S_MACHINE_TB IS
END;ARCHITECTURE BHV OF S_MACHINE_TB ISCOMPONENT S_MACHINEPORT (CLK, RESET: IN STD_LOGIC;STARE_INPUTS: IN STD_LOGIC_VECTOR (0 TO 1);COMB_OUTPUTS: OUT STD_LOGIC_VECTOR (0 TO 1));END COMPONENT;--INPUT SIGNALSIGNAL CLK: STD_LOGIC := '0';
SIGNAL RESET: STD_LOGIC := '0';
SIGNAL STARE_INPUTS: STD_LOGIC_VECTOR (0 TO 1) := "00";
--OUTPUT SIGNAL
SIGNAL COMB_OUTPUTS: STD_LOGIC_VECTOR (0 TO 1);--TIMER PERIOD DEFINE
CONSTANT CLK_PERIOD: TIME := 20 NS;
BEGIN--component instantiationDUT:S_MACHINE PORT MAP(CLK=>CLK, RESET=>RESET, STARE_INPUTS=>STARE_INPUTS, COMB_OUTPUTS=>COMB_OUTPUTS);--generate clock signalclk_gen: PROCESSBEGIN
CLK <= '1';WAIT FOR CLK_PERIOD/2;CLK <= '0';WAIT FOR CLK_PERIOD/2;END PROCESS;--drive signalTB: PROCESSBEGINWAIT FOR 20 NS;RESET <= '1';WAIT FOR 20 NS;RESET <= '0';WAIT FOR 210 NS;STARE_INPUTS <= "01";WAIT FOR 20 NS;STARE_INPUTS <= "10"; WAIT FOR 20 NS;
STARE_INPUTS <= "11";WAIT FOR 20 NS;STARE_INPUTS <= "00";WAIT FOR 20 NS;STARE_INPUTS <= "11";WAIT FOR 20 NS;STARE_INPUTS <= "10";WAIT FOR 20 NS;STARE_INPUTS <= "01";WAIT FOR 20 NS;STARE_INPUTS <= "00";WAIT FOR 20 NS;WAIT;END PROCESS; END;
定义所测试元件的VHDL程序,该程序是一个简单的Mealy型状态机演示程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY S_MACHINE ISPORT (CLK, RESET: IN STD_LOGIC;STARE_INPUTS: IN STD_LOGIC_VECTOR(0 TO 1);COMB_OUTPUTS: OUT STD_LOGIC_VECTOR(0 TO 1));
END;ARCHITECTURE ART OF S_MACHINE ISTYPE STATES IS (ST0, ST1, ST2, ST3); --define STATES as enumSIGNAL CURRENT_STATE, NEXT_STATE: STATES;BEGIN
REG: PROCESS (RESET, CLK)BEGINIF RESET = '1' THENCURRENT_STATE <= ST0;ELSIF(CLK = '1' AND CLK'EVENT) THENCURRENT_STATE <= NEXT_STATE;END IF;END PROCESS;COM: PROCESS(CURRENT_STATE, STARE_INPUTS) --feedback signalBEGINCASE CURRENT_STATE ISWHEN ST0=>COMB_OUTPUTS<="00";IF STARE_INPUTS="00" THENNEXT_STATE<=ST0;ELSENEXT_STATE<=ST1;END IF;WHEN ST1=>COMB_OUTPUTS<="01";IF STARE_INPUTS = "00" THENNEXT_STATE <= ST1;ELSENEXT_STATE <= ST2;END IF;WHEN ST2=>COMB_OUTPUTS <= "10";IF STARE_INPUTS = "11" THEN
NEXT_STATE <= ST2;ELSENEXT_STATE <= ST3;END IF;WHEN ST3=>COMB_OUTPUTS <= "11";IF STARE_INPUTS = "11" THENNEXT_STATE <= ST3;ELSE NEXT_STATE <= ST0;END IF;END CASE;END PROCESS;END ART;
使用以上测试平台文件对元件进行功能仿真,仿真结果如下图:
仿真响应:
控制仿真:
无控制,则仿真会一直持续到时间等于设定的仿真时间;
如果想在某个时间终止仿真,可使用断言语句ASSERT来实现;
另外,ASSERT语句可以实现对某些值或行为作出响应。
断言语句(ASSERT):
最适合于执行仿真的自动响应;
可以检查一个条件并报告信息;
根据所选择的严重级别和仿真工具的设置,在ASSERT语句报告了信息后,仿真可以继续执行(警告级别WARNING)或者停止(错误ERROR或致命错误FAILURE),默认的严重级别为ERROR
使用断言语句判断仿真的时间,如果当前时间为1000ns,则仿真完成,使用ERROR严重级别终止仿真过程。
断言语句判断条件时,如果条件的判断结果为FALSE,则执行后面的报告及严重级语句,否则仿真会忽略后面的报告和严重级语句并继续执行。
可以使用ASSERT语句设定一个判断条件,以便对仿真的某个结果或值做出响应,例如:
下面的程序为4位计数器的行为模型,计数器的位数为4位。方向由信号DIR决定,如果DIR为高电平,则正向计数,如果DIR为低电平,则反向计数。计数结果保存在CT_RESULT信号中。
下面的程序为测试平台,在程序中,一个断言语句用于判断计数结果是否等于”1001”。条件判断使用了“不等于(/=)逻辑”,如果判断条件为FALSE,即等于“1001”,则报告信息,并终止仿真。
以上测试文件在Modelsim中的仿真波形如下:
当计数到”1001”,在Modelsim的信息栏输出所要报告的信息,如下:
文件I/O的读写:
从文件加载数据或将数据存储到文件中:
例如用户定义的测试矢量可以保存在文件中,然后在仿真时从文件中读取这些测试矢量。
另外,仿真的结果可以保存在文件中。
VHDL’93的文件I/O读写主要是用于仿真,综合工具并不支持文件I/O的读写。
如果想在仿真时进行文件操作,必须包括标准库STD中的TEXTIO定义的程序库,该程序库中包含了文件啊你输入输出所需要的基本子程序(函数和过程)。
定义文件:
文件的两个类型:
Integer:文件中的数据是以二进制存取的,不能被人识别,只有integer型的数据能够存入这列文件。
String:文件是以ascii码形式读取的,可以被人识别;integer、bit_vector(x downto y)、string(x downto 1)、std_logic_vector(x downto o)、bit等都可以被存入此类文件。
定义语法:
FILE FILEIN : TEXT;
TYPE INTEGERFILE IS FILE OF INTEGER;
FILE FILEIN : INTEGERFILE;
打开文件:
定义文件句柄后就可以在程序中打开指定文件,同时指定打开模式。
读写文件:
打开文件后就可以对文件进行读写操作,其语句格式如下:
使用以上语句只能写入指定类型的数据,如integer类型的只能写入integer型数据。如果写入其他类型需要遵循以下步骤:
关闭文件:
在文件读写完毕后,需使用file_close(file_handle);关闭文件。
ENDFILE(file_handle);判断在文件操作中是否读取到文件的末尾
VHDL’93标准包括如下重要的文件I/O操作子程序:
下面举一个例子,使用了上面介绍的各种语法:
h3
modelsim控制台做如下操作:
等待数秒后,在modelsim工程目录下将会新建一个”DATAIN.TXT”文本文档,打开文档其内容如下:
相关文章:
VHDL语言基础-Testbech
目录 VHDL仿真概述: 基本结构: VHDL一般仿真过程: 仿真测试平台文件: 编写测试平台文件的语言: 一个测试平台文件的基本结构如下: 测试平台文件包含的基本语句: 产生激励信号的方式: 时钟信号: 复位信号: 周期信性信号: 使用延迟DELAYD: 一般的激励信号…...
机器学习基础总结
一,机器学习系统分类 机器学习系统分为三个类别,如下图所示: 二,如何处理数据中的缺失值 可以分为以下 2 种情况: 缺失值较多:直接舍弃该列特征,否则可能会带来较大噪声,从而对结果造成不良影…...
linux的三权分立设计思路和用户创建(安全管理员、系统管理员和审计管理员)
目录 一、三权分立设计思路 1、什么是三权 2、三员及权限的理解 3、三员之三权 4、权限划分 5、“三员”职责 6、“三员”配置要求 二、linux三权分立的用户创建 1、系统管理员 2、安全管理员 3、审计管理员 一、三权分立设计思路 1、什么是三权 三权指的是配置、…...
revit中如何创建有坡度的排水沟及基坑?
一、revit中如何创建有坡度的排水沟? 先分享一张有坡度排水沟的族的照片给大家加深一下印象,有了一个粗略的直观认识,小编就来说说做这个族的前期思路吧。 一、前期思路: 1、 用拼接的方式把这个族形状拼出来,先用放样࿰…...
Web自动化测试——selenium篇(一)
文章目录一、环境准备二、Web 自动化测试 Demo三、元素定位常用方法四、元素定位失败可能原因五、测试对象操作六、等待操作七、信息打印在学习 Web 自动化测试的过程中,selenium 是其中的常用工具。除了其开源免费,包含丰富的 API 以外,它还…...
认识 CSS pointer-events 属性
pointer-events 的基本信息 pointer-events 属性用来控制一个元素能否响应鼠标操作,常用的关键字有 auto 和 none pointer-events: none; // 让一个元素忽略鼠标操作 pointer-events: auto; // 还原浏览器设定的默认行为 规范定义 条目状态初始值auto可用值适用所…...
【java】springboot和springcloud区别
文章目录1、含义不同2、作用不同3、使用方式不同4、特征不同5、注释不同6、优势不同7、组件不同8、设计目的不同1、含义不同 springboot:一个快速开发框架,它简化了传统MVC的XML配置,使配置变得更加方便、简洁。 springcloud:是…...
网易游戏实时 HTAP 计费风控平台建设
本文整理自网易互娱资深工程师, Flink Contributor, CDC Contributor 林佳,在 FFA 实时风控专场的分享。本篇内容主要分为五个部分: 实时风控业务会话会话关联的 Flink 实现HTAP 风控平台建设提升风控结果数据能效发展历程与展望未来 众所周知ÿ…...
vue组件
文章目录1.vue组件2.非单文件组件2.1组件创建2.2祖册组件2.3使用组件3.组件的嵌套3.1 school组件嵌套student3.2 app组件嵌套school和hellozujain3.3 vm里面引入app组件4.VueCompent5.单文件组件1.vue组件 组件是实现应用中功能的局部代码和资源的集合 2.非单文件组件 2.1组件…...
让mybatis-plus支持null字段全量更新
文章目录背景方案一使用方案二方案二原理介绍背景 如果仅仅只是标题所列的目标,那么mybatis-plus 中可以通过设置 mybatis-plus.global-config.db-config.field-strategyignored 来忽略null判断,达到实体字段为null时也可以更新数据为null 但是一旦使用…...
MASA Stack 1.0 发布会讲稿——生态篇
2022年运营回顾 贡献者 首先感谢贡献者们为MASA Stack社区所作的积极贡献,这些贡献者给我们提出了很多宝贵的建议,更是积极的提交PR帮助我们一起让产品更健壮,更完善,还在各种场合推广我们的解决方案,非常给力&#x…...
华为OD机试 - 火星文计算2(JS)| 真题+思路++考点+代码
火星文计算2 题目 已知火星人使用的运算符号为#;$ 其与地球人的等价公式如下 x#y4*x3*y2 x$y2*xy3 x y是无符号整数 地球人公式按照c语言规则进行计算 火星人公式中#符优先级高于$ 相同的运算符按从左到右的顺序运算 输入 火星人字符串表达式结尾不带回车换行 输入的字符串…...
从春节后央行的首批罚单,看金融反欺诈反洗钱的复杂性
目录 个人信息保护的问题 征信管理的问题 反洗钱与反欺诈的问题 金融欺诈愈加复杂多变 金融机构如何增强反欺诈反洗钱 春节后,央行公示首批罚单。其中,厦门银行被中国人民银行福州中心支行给予警告,并没收违法所得767.17元,处…...
【Hello Linux】Linux工具介绍 (yum vim)
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍Linux的常用工具 yum和vim Linux工具介绍Linux中的软件管理工具 -- yum在windows下安装软件的方式在Linux下安装软件的方式认识yum…...
多种充电模式_手持无线充气泵方案
一、手持无线充气泵手持无线充气泵是一个通过锂电池供电达到无需插电就能使用的便携式充气泵,它的适用场景大部分是为身处户外没有办法接通电源的人而设计的,方便人们的出行也可解燃眉之急。不仅如此,为预防手持无线充气泵的锂电池电量用完而…...
【网络基础】DNS是什么
本文不会直接引入复杂枯燥概念,用形象例子通俗讲解,旨在入门理解。 DNS作用 DNS是用来做域名解析的。 相当于把网址翻译成实际ip地址,供其他设备访问。 一个例子 有一个网站的服务器IP地址为1.1.1.1,用电脑访问该网站的话只需…...
二叉树的性质与推导及常见习题整理
目录 一、性质推导 二、常见的二叉树性质习题 1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为()。 2.在具有 2n 个结点的完全二叉树中,叶子结点个数为(ÿ…...
亚马逊卖家测评补单的重要性和缺点
对于亚马逊、沃尔玛、ebay、wish、newegg、速卖通、阿里国际站、shopee、lazada、temu、乐天、toktok、joom、ozon等卖家来说,测评补单是一个比较常见的话题,因为测评可以给自己产品留下优质的评价,让国外真实买家更加明确,便捷的…...
Java类和对象超详细整理,适合新手入门
目录 一、驼峰命名法 二、Java注释 三、转义符 四、Java程序它的基本结构是什么? 五、Java中的类 六、创建类 七、定义main方法 八、执行代码输出语句 九、Java中的对象 十、创建对象 十一、类与对象的关系 一、驼峰命名法 包名:多单词组成所…...
MySQL:连explain的type类型都没搞清楚,怎敢说精通SQL优化?
我们在使用SQL语句查询表数据时,提前用explain进行语句分析是一个非常好的习惯。通过explain输出sql的详细执行信息,就可以针对性的进行sql优化。 今天我们来分析一下,在explain中11种不同type代表的含义以及其应用场景。 1,sys…...
6.11 极分解
文章目录计算方法代码实现计算方法 一个复数可以写成极坐标形式:zreiθzre^{i\theta}zreiθ.这种分解,左边代表长度,右边代表角度。由此为灵感来源,前人对矩阵也有类似的分解。就是猜想一个线性变换对矩阵的作用,是不是可以分解为…...
Spring、SpringMVC、Shiro、Maven
一、SpringSpring是一个为了解决企业应用程序开发复杂性而创建的开源框架,其核心是IOC–控制反转、AOP–面向切面编程。框架的主要优势之一就是其分层架构(WEB层(springMvc)、业务层(Ioc)、持久层ÿ…...
element-plus 使用笔记
npm install element-plus --save自动导入 npm install -D unplugin-vue-components unplugin-auto-import// vite.config.jsimport AutoImport from unplugin-auto-import/vite import Components from unplugin-vue-components/vite import { ElementPlusResolver } from …...
《蓝桥杯每日一题》 前缀和·Acwing 3956. 截断数组
1.题目https://www.acwing.com/problem/content/3959/给定一个长度为 n 的数组a1,a2,…,an。现在,要将该数组从中间截断,得到三个非空子数组。要求,三个子数组内各元素之和都相等。请问,共有多少种不同的截断方法?输入…...
促进关键软件高层次人才培养:平凯星辰与华东师范大学签订联合博士培养合作协议
2022 年年初,平凯星辰入选首批工信部教育部支持联合培养国家关键软件高层次人才计划。该计划旨在探索关键软件产教融合育人模式,超常规加快培养一批急需高层次人才,以及探索关键软件联合技术攻关新模式。2022 年年底,在该计划下 平…...
Java程序员的日常——经验贴
关于文件的解压和压缩 如果你的系统不支持tar -z命令 前往讨论 如果是古老的Unix系统,可能并不认识tar -z命令,因此如果你想要压缩或者解压tar.gz的文件,就需要使用gzip或者gunzip以及tar命令了。 关于tar.gz可以这么理解,tar结…...
电商API社区,商品数据,关键词搜索等
1. 需要做的事情 l 商品详情页实现 1、商品查询服务事项 2、商品详情展示 3、添加缓存 2. 实现商品详情页功能 2.1. 功能分析 1、Taotao-portal接收页面请求,接收到商品id。 2、调用taotao-rest提供的商品详情的服务,把商品id作为参数传递给服务。接…...
LEADTOOLS 22.0.6 UPDATE-Crack
OCR SDK 库 许多 OCR 增强功能 LEAD 行业领先的人工智能 OCR SDK 在以下方面获得了显着的识别优化:斜体、大写和小写字母、文本行组装和单词构建、列检测、基线检测和文本行分割。 LEADTOOLS为.NET 6、. NET Framework、Xamarin、UWP、C#、VB、C/C、Java、Objective…...
什么是OJ? 东方博宜题库部分题解
什么是OJ ? Online Judge 比如这样的:Home - 一本通OJ Q:这个在线裁判系统使用什么样的编译器和编译选项? A:系统运行于Debian/Ubuntu Linux. 使用GNU GCC/G++ 作为C/C++编译器, C: gcc Main.c -o Main -fno-asm -O2 -Wall -lm --static -std=c99 -DONLINE_JUDGE C++: g++ …...
企业工程项目管理系统源码的各模块及其功能点清单
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...
海口网站建设费用/福州seo公司
(250条消息) hive计算map数和reduce数_一只刚刚上路的猿-CSDN博客 hive优化之——控制hive任务中的map数和reduce数 – lxw的大数据田地 (lxw1234.com) (偏向于控制map和reduce的个数,比较老的文章,但是还是有参考价值)...
五里桥街道网站建设/百度竞价怎么做
文章目录基础代码子传父props组件的自定义事件this.$emit() 给子组件绑定自定义事件传递参数this.$ref 给子组件绑定自定义事件.once 只能点一次解绑自定义事件解绑一个自定义事件解绑多个事件this.$off() //解绑所有的自定义事件注意点1.2. this.refs.xxx.refs.xxx.refs.xxx.o…...
郑州经济技术开发区建设局/优化公司排行榜
今天遇到的是内存释放错误的问题。原因是没写拷贝构造函数,奇怪的是我之前也没写确实能正常工作的,今天深究了一下发现是编译器做了返回值优化。 问题背景 编译环境还是针对C6455 DSP,为了做一些简单的图像直方图的处理,并且尽可…...
怎样用ps做网站首页图/安新seo优化排名网站
首先把django的组件的app复制到新的项目的根目录下, 删除migrations的文件,只剩下__init__.py,因为以前生成过新的表,再进来要建立新表 注册app在设置文件中,...
网站建设前的功能/b站推广链接
字节跳动启动了史上规模最大的招聘共计7000岗位,每个人有两次投递机会包括抖音,今日头条,西瓜在内评论区好热闹俗话说“三月不跳槽,四月徒伤悲”又到了一年一度的“跳槽黄金季”在职场中,有不少的的瞬间我们自己觉得洪…...
个体工商户可以做网站备案吗/陕西新闻今日头条
远离消费陷阱,提升消费体验,黑猫投诉平台全天候服务,您的每一条投诉,都在改变这个世界。【投诉,就上黑猫!】 新浪科技讯 3月5日下午消息,特斯拉日前宣布各个型号汽车均有不同程度降价ÿ…...