vhdl中的component的定义及使用

vhdl中的component的定义及使用,第1张

对于你的问题1,2,3,4点我就以你举的这个8位寄存器来回答:

首先你的8位寄存器加入了clr这个复位信号,那么你的DFF也应该有这个信号,因此你的DFF中的PROCESS就应该改为:

process(clk)

begin

if clr = '1' then

Q <= '0'--或者'X'

elsif(clk'event and clk='1') then

Q<=D

end if--你这里忘写了

end process

好,这下你的DFF正确了,我接着你的代码写8位的:

另外,不造成概念混淆,我把你8位的entity改成这样:

entity reg_8bit is

port( clk_8, clr_8 : in std_logic

x : in std_logic_vector(7 downto 0)--downto 中间没有空格

y: out std_logic_vector(7downto 0)

)

end reg_8bit

architecture arch_reg_8bit of reg_8bit is

component dff

generic(参数)--这个例子没有参数,所以不写这句。如果有,那么这个参数为定值,FPGA运行过程中无法被改变(因为在综合过程中已经被翻译成电路了)。 至于参数的使用方法,你百度一下很容易知道了。

port(

clk,clr,D : in std_logic

Q : out std_logic

)

end component

begin

generate_8_dff : for i in 0 to 7 generate

dff_x : dff port map(

clk =>clk_8,

clr =>clr_8,

D =>x(i),

Q =>y(i)

)

end generate generate_8_dff,

end arch_reg_8bit

上面的for i in n to m generate 的目的只是为了复制m-n+1次电路,没有任何时序因素在其中,不要和C语言中的FOR循环搞混了。

好了,你的第5点我就不客气地收下了。要是有用,就采纳下我的答案吧,3Q。

说实话,阅读文档并不是我们大多数人喜欢的事情,但是当使用像Vue这样不断发展的现代前端框架时,每一个新版本都会有所变化,我们很有可爱已经错过了一些后来推出的新且好用的功能。

今天,刷碗智带大家来看看那些有趣但不那么流行的功能。记住,所有这些都是官方Vue文档的一部分。

在大型项目中,我们可能需要将组件分成小块,只有在需要时才从服务器上加载。为了更容易做到这一点,Vue允许我们将组件定义为一个工厂函数,异步地解析组件定义。Vue只会在组件需要渲染的时候触发工厂函数,并把结果缓存起来以备后面的重新渲染。2.3版的新内容是,异步组件工厂还可以返回以下格式的对象。

使用这种方法,我们有额外的选项,包括加载和错误状态、组件获取的延迟和超时。

渲染普通的 HTML 元素在 Vue 中是非常快速的,但有的时候你可能有一个组件,这个组件包含了大量静态内容。在这种情况下,我们可以在根元素上添加 v-once attribute 以确保这些内容只计算一次然后缓存起来,就像这样:

组件是可以在它们自己的模板中调用自身的。不过它们只能通过 name 选项来做这件事:

当你使用 Vue.component 全局注册一个组件时,这个全局的 ID 会自动设置为该组件的 name 选项。

稍有不慎,递归组件就可能导致无限循环:

类似上述的组件将会导致 “max stack size exceeded” 错误,所以请确保递归调用是条件性的 (例如使用一个最终会得到 false 的 v-if )。

当 inline-template 这个特殊的 attribute 出现在一个子组件上时,这个组件将会使用其里面的内容作为模板,而不是将其作为被分发的内容。这使得模板的撰写工作更加灵活。

内联模板需要定义在 Vue 所属的 DOM 元素内。

指令的参数可以是动态的。例如,在 v-mydirective:[argument]="value" 中, argument 参数可以根据组件实例数据进行更新!这使得自定义指令可以在应用中被灵活使用。

例如你想要创建一个自定义指令,用来通过固定布局将元素固定在页面上。我们可以像这样创建一个通过指令值来更新竖直位置像素值的自定义指令:

对于 .passive 、 .capture 和 .once 这些事件修饰符,Vue 提供了相应的前缀可以用于 on:

修饰符前缀 .passive& .capture! .once~ .capture.once 或.once.capture~!

例如:

对于所有其它的修饰符,私有前缀都不是必须的,因为你可以在事件处理函数中使用事件方法:

修饰符处理函数中的等价 *** 作 .stopevent.stopPropagation() .preventevent.preventDefault() .selfif (event.target !== event.currentTarget) return 按键:.enter, .13if (event.keyCode !== 13) return (对于别的按键修饰符来说,可将 13 改为另一个按键码) 修饰键:.ctrl, .alt, .shift, .metaif (!event.ctrlKey) return (将 ctrlKey 分别修改为 altKey、shiftKey 或者 metaKey)

在Vue中,有几种方法可以让两个组件进行通信,所有这些方法都有优点和缺点。 2.2 版本中引入的一种新方法是使用 Provide/Inject 的依赖注入。

这对选项一起使用,允许一个祖先组件作为其所有后代的依赖注入器,无论组件层次有多深,只要它们在同一个父链上。如果你熟悉React,这与React的上下文功能非常相似。

今天就到这了,就这?

~完,我是刷碗智,疫情只能在家 LoL 了。

关键点:通过:id="getId(info)"将info属性(props)值传递到方法,然后再设置值,网上的watch方法试了无效,这个方法实测有效

源码如下:

<page v-bind:info="paginationVo" ></page>

// 注册 - 名字不能大写 分页组件<page v-bind:info="paginationVo" ></page>

Vue.component('page', {

// 声明 属性

props: ['info'],

template: '<ul :id="getId(info)" class="c_page"><li v-if="isShowPreBtn"><button v-on:click="btnHandler(-1)">上一页</button></li><li v-if="isShowNextBtn"><button v-on:click="btnHandler(-2)" >下一页</button></li></ul>',

data: function() {

return {

counter: 0,

paginationVo:{},

isShowPreBtn:false,

isShowNextBtn:false,

}

},

mounted() {

console.log("-------mounted:"+JSON.stringify(this.paginationVo))


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11268265.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存