前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >日常记录(6)Verilog

日常记录(6)Verilog

作者头像
嘘、小点声
发布于 2021-12-14 07:22:08
发布于 2021-12-14 07:22:08
59300
代码可运行
举报
文章被收录于专栏:嘘、小点声嘘、小点声
运行总次数:0
代码可运行

秒的换算

https://baike.baidu.com/item/%E7%A7%92/2924586

1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒)=10^12ps(皮秒)=10^15fs(飞秒)=10^18as(阿秒)=10^21zm(仄秒)=10^24ym(幺秒)

时间单位1ns,10fs精度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`timescale 1ns/10fs

不可综合

https://www.cnblogs.com/jiu0821/p/4166192.html

1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。 2)所有综合工具都不支持的结构:time,defparam,$finish,forkjoininitial,delays,UDPwait。 3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。 建立可综合模型的原则 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:

(1)不使用initial。

(2)不使用#10。

(3)不使用循环次数不确定的循环语句,如forever、while等。

(4)不使用用户自定义原语(UDP元件)

(5)尽量使用同步方式设计电路。

(8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。

(12)避免混合使用上升沿和下降沿触发的触发器。 不可综合verilog语句 1、initial

2、events

3、real

4、time

5、force 和release

6、assign 和deassign 不支持对reg 数据类型的assign或deassign进行综合,支持对wire数据类型的assign或deassign进行综合。

7、fork join 不可综合,可以使用非块语句达到同样的效果。

8、primitives 支持门级原语的综合,不支持非门级原语的综合。

9、table 不支持UDP 和table的综合。 10、敏感列表里同时带有posedge和negedge always @(posedge clk or negedge clk) begin...end 这个always块不可综合。 11、同一个reg变量被多个always块驱动

12、延时以#开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。

如:a=#10 b; 这里的#10是用于仿真时的延时,在综合的时候综合工具会忽略它。也就是说,在综合的时候上式等同于a=b;

13、与X、Z的比较

惯性延时和传输延时

@和wait的区别

两个概念,但是还有点相同的地方。主要是用法的差异。@应该是某时刻点的一种触发,wait似乎是等待一段时间。

在竞争关系中,使用wait可以缓解事件偶尔未被触发。

https://blog.csdn.net/qq_41894346/article/details/104964478

在Verilog中当一个线程在一个事件上发生阻塞的同时,正好另一个线程触发了这个事件,则竞争就出现了。如果触发线程先于阻塞线程,则触发无效(触发是一个零宽度的脉冲)。

Systemverilog 引入了triggered()函数,用于检测某个事件是否已被触发过,包括正在触发。线程可以等待这个结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
event a;    //使用关键字event来声明一个事件a
initial begin
    #1;
    ->a;
end
initial    begin
    #1;
    @a;        //第一个进程在1ns后触发了事件a,那么第二个进程在1ns的时候等待a,有可能等的到,有可能等不到,产生竞争
end
initial begin
    #1;
    wait(a.triggered); //使用wait来等待事件a,这种方式是一定可以等到a的,这是和使用@来等待的区别
end

例子2

https://blog.csdn.net/Michael177/article/details/120807670

triggered()函数,用于检测某个事件是否已被触发过,包括正在触发。线程可以等待这个结果,而不用在@操作符上xx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module event_test();
  event a;
  initial begin
    #50;
    ->a;
    $display("Event a is being triggered!");
  end
  
  initial begin
    #20;
    wait(a.triggered);
    $display("#20 a.triggered!");
  end
  
  initial begin
    #50;
    wait(a.triggered);
    $display("#50 a.triggered!");
  end
  
  initial begin
    #60;
    wait(a.triggered);
    $display("#60 a.triggered!");
  end

endmodule

parameter、interger、reg

https://blog.csdn.net/wuguozeng1989/article/details/46682125

1. integer类型的变量作为有符号数使用,而reg类型的变量则作为无符号数使用。

2. integer的位宽为字的位数,最小为32位

https://blog.csdn.net/qq_16923717/article/details/81067096

3. parameter是常量,不是变量,所以不允许在运行时修改它的值,即不能在组合逻辑或者时序逻辑中对其进行赋值。

竞争与冒险

https://blog.csdn.net/wordwarwordwar/article/details/79829130

信号由于经由不同路径传输达到某一汇合点的时间有先有后的现象,就称之为竞争,英文名Race;

由于竞争现象所引起的电路输出发生瞬间错误的现象,就称之为冒险,英文名Hazard或者Risk。

有竞争不一定有冒险,但出现了冒险就一定存在竞争。

解决方式:

1.引入封锁脉冲,锁存器

2.引入选通脉冲,稳定后选择

3.引入滤波电容。

4.修改逻辑设计。

https://blog.csdn.net/yc16032399/article/details/100126361

RS锁存器

https://blog.csdn.net/kewei168/article/details/101141511

真值表

R

S

Q

0

0

Q

0

1

1

1

0

0

1

1

X

  • R=1时,S=0,输出为0,故R又称为直接置“0”端,或“复位”端
  • 当R=0时,S=1,输出为1,故S又称为直接置“1”端,或“置位”端
  • 当R=S=0时,输出保持不变(保证了RS同时为0(断电)后,电路输出能够保持不变)
  • RS同时为1,若从同时为0的状态开始变化,则中间产生不定的输入状态01或10,产生不定的输出,不被使用。

Makefile

Makefile拆分为两部分,进行逐个解释。

(1)第一部分如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CC=g++

sources:=$(wildcard *.c) $(wildcard *.cpp)

objects:=$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(sources)))

dependence:=$(objects:.o=.d)

all: $(objects)

    $(CC) $(CPPFLAGS) $^ -o $@

    @./$@  

%.o: %.c

    $(CC) $(CPPFLAGS) -c $< -o $@

%.o: %.cpp

    $(CC) $(CPPFLAGS) -c $< -o $@
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wildcard表示通配符,source则是整个文件夹中所有的c文件和h文件组成的变量。patsubst表示替换,%表示任意。首先将source变量中的所有cpp文件名转换为o文件名,然后再将修改后的变量中,所有的c文件名转换为o文件名,最后组成object变量。下一行的等号表示替换关系,将object中的所有.o文件名替换为.d文件名,组成了dependence文件名变量。make默认执行第一个规则,第一个规则名为all,其依赖了所有的object,即该文件夹下的所有.o文件。在执行该条语句前,应该先执行所有的.o对应的规则,当所有的.o的规则满足后,则执行编译过程。其中的$^表示了本条规则下所有依赖的文件名,$@表示本条编译规则名称,即all。当执行本条命令,则会生成一个名称为all的可执行文件。之后的@表示不显示执行的该条命令(当执行make时,所有执行的实际命令会在屏幕中进行打印)。 CC为编译器,使用=表示延迟生效的变量,使用:=表示立即生效的变量。延时生效的变量使用意义在于,随后对CC进行重新赋值后,以重新赋值的结果在整个Makefile中生效。

%.o:%.c表示当前的文件夹下的每个.o文件方法,都依赖于每个对应的.c文件。然后执行生成过程。生成过程中,使用$<表示该方法依赖的文件中的第一个(因为有些时候依赖的内容不仅包括.c文件,还包括.h文件,.h文件一般不会写在第一个位置)。

(2)第二部分如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
include $(dependence)  

define gen_dep

set -e; rm -f $@; \

$(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \

sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@

rm -f $@.$$$$

endef

%.d: %.c

    $(gen_dep)

%.d: %.cpp

    $(gen_dep)

.PHONY: clean

clean: 

    rm -f all $(objects) $(dependence)

echo:  

    @echo sources=$(sources)

    @echo objects=$(objects)

    @echo dependence=$(dependence)

    @echo CPPFLAGS=$(CPPFLAGS)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用define和endef的宏定义,以gen_dep代表随后的4行命令。set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出,而不是继续向下执行。rm -rf $@表示删除生成的目标文件。 include表示引入外部文件,原理上类似于C语言中的.c文件。这里将所有的.d文件规则进行展开。写到这里而不是开头的原因在于,开头写的规则为默认规则,写到开头会覆盖默认规则。

-M显示完整的c文件对头文件依赖关系,一般使用-MM显示不包含系统头文件的部分即可。>符号表示数据重定向符号,将数据重定向到$@.$$$$文件。在Makefile文件中,$表示变量的标记,使用$$则为真正的$符号。四个$转换为两个$符号,两个$符号表示进程的pid。因此数据会重定向到一个后缀为.pid的对应文件中。

sed的替换命令中,使用逗号作为分隔符,s,g作为开头和结尾,中间添加逗号,进行行内替换操作。$*匹配%.d中的%表示的部分,即为规则目标使用通配符时,通配符表示的数据的第一部分。然后外部添加括号和.o,并添加数个空格和冒号,作为替换的源。该正则表达式分为三部分,以括号为第一部分,.o为第二部分,[ :]*为第三部分。

在替换的目标中,\1表示替换的源的第一部分,然后添加.o和空格和该规则下的先决条件名。替换的结果存储在目标文件中。sed将上一句生成的依赖关系中的一些部分进行了替换,写入到了每个先决条件文件下。替换的内容为:target.o : target.c *.h替换为:target.o target.d : target.c *.h。每个target.d文件的生成依赖于对应的target.c和*.h文件。当.d文件发生变化,则执行对应的make规则。即.d文件表达了替换名。

随后的%d:%c以及%d:%cpp则对应执行了需要的命令。.d文件若是最新的,则.d对应的规则不会被执行。clean也是一样。当目录下存在一个为clean的文件,则对应的规则不会被执行。使用.PHONY可以去除这种效果,使得每次选择该条命令时必执行。后续的语句即为常规语句。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【论文笔记】2020-ACL-Neural Dialogue State Tracking with Temporally Expressive Networks
​ 现有的 DST 模型要么 忽略跨对话回合的时间特征依赖关系 ,要么 未能在对话中显式地建模时间状态依赖关系。
yhlin
2023/03/23
8010
【论文笔记】2020-ACL-Neural Dialogue State Tracking with Temporally Expressive Networks
【论文笔记】A Sequence-to-Sequence Approach to Dialogue State Tracking
​ 本文提出了一种新的对话状态跟踪方法,称为 Seq2SeqDU,它将 DST 形式化为一个序列到序列问题。Seq2Seq-DU 的 独特之处 是它使用两个基于 BERT 的编码器分别对对话中的话语和模式描述进行编码,一个注意者计算话语嵌入和模式嵌入之间的注意,以及一个解码器生成表示对话当前状态的指针。
yhlin
2023/02/13
2.3K0
【论文笔记】A Sequence-to-Sequence Approach to Dialogue State Tracking
【论文笔记】A Graph-based and Copy-augmented Multi-domain Dialogue State Tracking
​ 大多数现有的方法都在单个领域上独立训练 DST,而忽略了跨领域之间的信息的有效共享。
yhlin
2023/03/23
8780
【论文笔记】A Graph-based and Copy-augmented Multi-domain Dialogue State Tracking
【论文笔记】Multi-Domain Dialogue State Tracking based on State Graph
​ 现有的方法通常将以前的对话状态与对话历史连接作为编码器的输入。它们依赖于编码器的自我注意机制来连接其中的 token。然而,编码器可能会注意到虚假的联系,从而导致错误的推断。
yhlin
2023/02/27
1.4K0
【论文笔记】Multi-Domain Dialogue State Tracking based on State Graph
【论文笔记】Jointly Optimizing State Operation Prediction and Value Generation for Dialogue State Tracking
​ 现有的方法利用 BERT 编码器和基于拷贝的 RNN 解码器,其中编码器预测状态操作,并由解码器生成新的插槽值。然而,在这种堆叠的编码器 - 解码器结构中,操作预测目标 只影响 BERT 编码器,而值生成目标 主要 影响 RNN 解码器。此外,在框架中,编码器是预先训练的,而解码器则没有预先训练。
yhlin
2023/02/27
8770
【论文笔记】Jointly Optimizing State Operation Prediction and Value Generation for Dialogue State Tracking
【论文笔记】2019-ACL-Dialog State Tracking: A Neural Reading Comprehension Approach
概要 问题动机   以往的 DST 方法通常都是输出一个对所有槽值的预测概率分布,使得模型无法预测 unseen 的槽值。这篇文章的作者以不同角度看待 DST 问题,将其建模为一个阅读理解任务,让模型
yhlin
2023/02/27
4580
【论文笔记】2019-ACL-Dialog State Tracking: A Neural Reading Comprehension Approach
【论文笔记】Efficient Context and Schema Fusion Networks for Multi-Domain Dialogue State Tracking
对于多域 DST,由于候选状态的数量和对话长度的增加,数据稀疏性问题 是一个主要障碍。
yhlin
2023/02/13
5410
【论文笔记】Efficient Context and Schema Fusion Networks for Multi-Domain Dialogue State Tracking
【论文笔记】2021-EMNLP-Knowledge-Aware Graph-Enhanced GPT-2 for Dialogue State Tracking
​ 为了建模槽间关系,本文提出了一种新的混合体系结构,它通过来自图注意网络的表示来增强 GPT-2,从而允许对槽值进行因果的、顺序的预测。模型体系结构捕获跨域的槽间关系和依赖关系。
yhlin
2023/02/27
1.3K0
【论文笔记】2021-EMNLP-Knowledge-Aware Graph-Enhanced GPT-2 for Dialogue State Tracking
【论文笔记】Multi-Attention-Based Scalable Dialog State Tracking
​ 我们的工作最类似于 TRADE,并通过提出自我和交叉注意力机制来捕捉位置和历史相关性。特别是,本文使用交叉注意在不同语义级别上的上下文和槽之间的模型关系,并使用自我注意来解决跨域共引用。此外,本文提出的体系结构并不依赖于事先了解域本体,也可以用于新域或看不见的插槽值的零镜头设置。
yhlin
2023/03/23
5650
【论文笔记】Multi-Attention-Based Scalable Dialog State Tracking
【论文笔记】Efficient Dialogue State Tracking by Selectively Overwriting Memory
  最近在对话状态跟踪 (DST) 方面的工作集中于基于开放词汇的设置,以解决基于预定义本体的方法的可伸缩性和泛化问题。然而,他们效率低下,因为他们从头开始预测对话状态。
yhlin
2023/02/13
9840
【论文笔记】Efficient Dialogue State Tracking by Selectively Overwriting Memory
【论文笔记】A Comparative Study on Schema-Guided Dialogue State Tracking
​ Frame-based 的状态表示在现代面向任务的对话系统中被广泛应用,以建模用户的意图和插槽值。然而,域本体的固定设计使得很难扩展到新的服务和 API。
yhlin
2023/03/23
1.4K0
【论文笔记】A Comparative Study on Schema-Guided Dialogue State Tracking
【论文笔记】Scalable End-to-End Dialogue State Tracking with Bidirectional Encoder Representations from Tr
对话状态跟踪 (DST) 中一个重要但很少被解决的问题是动态 ontology(如电影、餐馆)和 unseen 的插槽值的可扩展性。以前的方法通常依赖于 n 格枚举或槽标记输出的候选生成,这可能遭受错误传播而导致效率低下。
yhlin
2023/02/13
1.6K0
【论文笔记】Scalable End-to-End Dialogue State Tracking with Bidirectional Encoder Representations from Tr
【论文笔记】2017-ACL-Neural Belief Tracker: Data-Driven Dialogue State Tracking
  作者提出了一种新的神经信念跟踪 (NBT) 框架,基于 表示学习 的最新进展,克服了上述问题。NBT 模型是对预先训练好的单词向量进行推理,学习将它们组合成用户话语和对话上下文的分布式表示。我们对两个数据集的评估表明,这种方法超过了过去的局限性,匹配了最先进的模型的性能,这些模型依赖于手工制作的语义词汇,并在不提供这些词汇时表现优于它们。
yhlin
2023/02/13
6220
【论文笔记】2017-ACL-Neural Belief Tracker: Data-Driven Dialogue State Tracking
【多轮对话】多轮对话状态追踪技术综述
研究任务型对话系统,首先得从数据集采集说起,关于数据之前文章介绍过了,这里就不详细介绍了,参考:任务型多轮对话数据集和采集方法
百川AI
2022/02/28
4.7K3
【多轮对话】多轮对话状态追踪技术综述
大规模跨领域中文任务导向多轮对话数据集及模型CrossWOZ
机器人:北京饭店你看可以吗? (用户有两个以上目的(订机票和酒店)要通过对话实现)
朴素人工智能
2020/04/20
3.1K0
【论文笔记】An End-to-end Approach for Handling Unknown Slot Values in Dialogue State Tracking
​ 以前的方法通常假设预定义的候选列表,这些方法通常依赖于固定本体上的分类,或通过枚举候选列表分别对每个槽值对进行评分,输出列表中每个值的概率分布,因此不被设计来输出未知槽值。
yhlin
2023/02/13
6260
【论文笔记】An End-to-end Approach for Handling Unknown Slot Values in Dialogue State Tracking
自然语言处理学术速递[7.28]
【1】 QA Dataset Explosion: A Taxonomy of NLP Resources for Question Answering and Reading Comprehension 标题:问答数据集爆炸:面向问答和阅读理解的自然语言处理资源分类
公众号-arXiv每日学术速递
2021/07/29
7000
【多轮对话】多轮对话状态追踪综述
研究任务型对话系统,首先得从数据集采集说起,关于数据之前文章介绍过了,这里就不详细介绍了,参考:
百川AI
2024/04/09
6120
【多轮对话】多轮对话状态追踪综述
首次利用半监督注入知识,达摩院推出新型预训练对话模型,取得显著提升
机器之心专栏 作者:戴音培、李永彬 团队:达摩院-自然语言智能实验室-对话智能团队 如何将人类先验知识低成本融入到预训练模型中一直是个难题。达摩院对话智能团队提出了一种基于半监督预训练的新训练范式,通过半监督的方式将对话领域的少量有标数据和海量无标数据一起进行预训练,将标注数据中蕴含的知识注入到预训练模型中去,新提出的半监督预训练对话模型(Semi-Supervised Pre-trAined Conversation ModEl)SPACE 1.0 版本在剑桥 MultiWOZ2.0,亚马逊 MultiW
机器之心
2022/04/13
6980
首次利用半监督注入知识,达摩院推出新型预训练对话模型,取得显著提升
NeurlPS 2020 | 简约任务型对话,让对话实现不再繁琐
目前,对话系统主要分为任务型,问答型和闲聊型三种对话类型。其中,任务型对话,具有明确的任务目标,需要将每一句话,转化为参数,明确其任务目的,并完成任务,其主要应用场景为智能助理,智能会议系统等。问答型对话,也有明确的目标,但是不需要将问题转化为参数,只需给出答案,应用领域主要是客服。闲聊型只需要吸引客户闲聊下去,没有任务目标,其主要虚拟陪伴助手。任务型对话,在商业领域有这广泛的应用,主要是解决某一领域的具体问题。
AI科技评论
2020/12/08
1.8K0
NeurlPS 2020 | 简约任务型对话,让对话实现不再繁琐
推荐阅读
【论文笔记】2020-ACL-Neural Dialogue State Tracking with Temporally Expressive Networks
8010
【论文笔记】A Sequence-to-Sequence Approach to Dialogue State Tracking
2.3K0
【论文笔记】A Graph-based and Copy-augmented Multi-domain Dialogue State Tracking
8780
【论文笔记】Multi-Domain Dialogue State Tracking based on State Graph
1.4K0
【论文笔记】Jointly Optimizing State Operation Prediction and Value Generation for Dialogue State Tracking
8770
【论文笔记】2019-ACL-Dialog State Tracking: A Neural Reading Comprehension Approach
4580
【论文笔记】Efficient Context and Schema Fusion Networks for Multi-Domain Dialogue State Tracking
5410
【论文笔记】2021-EMNLP-Knowledge-Aware Graph-Enhanced GPT-2 for Dialogue State Tracking
1.3K0
【论文笔记】Multi-Attention-Based Scalable Dialog State Tracking
5650
【论文笔记】Efficient Dialogue State Tracking by Selectively Overwriting Memory
9840
【论文笔记】A Comparative Study on Schema-Guided Dialogue State Tracking
1.4K0
【论文笔记】Scalable End-to-End Dialogue State Tracking with Bidirectional Encoder Representations from Tr
1.6K0
【论文笔记】2017-ACL-Neural Belief Tracker: Data-Driven Dialogue State Tracking
6220
【多轮对话】多轮对话状态追踪技术综述
4.7K3
大规模跨领域中文任务导向多轮对话数据集及模型CrossWOZ
3.1K0
【论文笔记】An End-to-end Approach for Handling Unknown Slot Values in Dialogue State Tracking
6260
自然语言处理学术速递[7.28]
7000
【多轮对话】多轮对话状态追踪综述
6120
首次利用半监督注入知识,达摩院推出新型预训练对话模型,取得显著提升
6980
NeurlPS 2020 | 简约任务型对话,让对话实现不再繁琐
1.8K0
相关推荐
【论文笔记】2020-ACL-Neural Dialogue State Tracking with Temporally Expressive Networks
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验