组合逻辑 UDP 中,状态表规定了不同的输入组合和相对应的输出值,没有指定的任意组合输出值为 x。
一个简单的与非门 UDP 可以表示如下:
primitive nand_my(out, a, b);
output out ;
input a, b ;
table
//a b : out ;
0 0 : 1 ;
0 1 : 1 ;
1 0 : 1 ;
1 1 : 0 ;
endtable
endprimitive
如上一节所阐述,端口列表和声明部分可以改为:
primitive nand_my(
output out,
input a, b);
......
endprimitive
表示组合逻辑的状态表中的每一行的语法格式如下:
<input1> <input2> ... <inputN> : <output> ;
例如在上述 UDP nand_my 中,如果 a=0, b=x,则输出 out = x ,因为该组合选项在 table 中无法找到。所以在编写 UDP 时,要完整的考虑输入的所有组合情况。
UDP nand_my 的状态表可以修改为:
table
//a b : out ;
0 0 : 1 ;
0 1 : 1 ;
1 0 : 1 ;
1 1 : 0 ;
0 x : 1 ;
x 0 : 1 ;
endtable
UDP nand_my 中,当 a 或 b 两个输入只要有一个为 0 时,则输出为 1。
不影响输出结果的输入信号为无关项,可以用问号"?"来表示。状态表中的"?"项将自动展开为 0, 1 或 x。
因此 UDP nand_my 的状态表可以改为:
table
//a b : out ;
0 ? : 1 ;
? 0 : 1 ;
1 1 : 0 ;
//下面组合将输出 x,所以也可以省略,Verilog 默认会输出 x
1 x : x ;
x 1 : x ;
endtable
UDP 调用格式与内置门级原语完全一致。
利用上述 UDP nand_my 完成《1.3 门延迟》中 D 触发器的仿真。
去除延迟信息,D 触发器模型如下。
module D_TRI(
input D, CP,
output Q, QR);
//part1, not gate
wire CPN, DN ;
not (CPN, CP);
not (DN, D);
//part2, master trigger
wire G3O, G4O ;
nand_my (G3O, D, CP);
nand_my (G4O, DN, CP);
wire G1O, G2O ;
nand_my (G1O, G3O, G2O);
nand_my (G2O, G4O, G1O);
//part3, slave trigger
wire G7O, G8O ;
nand_my (G7O, G1O, CPN);
nand_my (G8O, G2O, CPN);
wire G5O, G6O ;
nand_my (G5O, G7O, G6O);
nand_my (G6O, G8O, G5O);
assign Q = G5O ;
assign QR = G6O ;
endmodule
testbench 保持不变,仿真结果如下。
由图可知,触发器在时钟 CP 下降沿采集到了 D 端信号,并传递给 Q/QR ,在单周期内保持不变。
UDP 完成的与非门功能正确。

我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
给定一个数组a,什么是实现其组合直到第n的最佳方法?例如:a=%i[abc]n=2#Expected=>[[],[:a],[:b],[:c],[:a,b],[:b,:c],[:c,:a]] 最佳答案 做如下:a=%w[abc]n=30.upto(n).flat_map{|i|a.combination(i).to_a}#=>[[],["a"],["b"],["c"],["a","b"],#["a","c"],["b","c"],["a","b","c"]] 关于ruby-最多n的组合,我
我想合并多个事件记录关系例如,apple_companies=Company.where("namelike?","%apple%")banana_companies=Company.where("namelike?","%banana%")我想结合这两个关系。不是合并,合并是apple_companies.merge(banana_companies)=>Company.where("namelike?andnamelike?","%apple%","%banana%")我要Company.where("名字像?还是名字像?","%apple%","%banana%")之后,我会写代
我有一个熟悉的问题,看起来像是数学世界的排列/组合。如何通过ruby实现以下目标?badges="1-2-3"badge_cascade=[]badges.split("-").eachdo|b|badge_cascade["1","2","3"]ButIwantittobeis:=>["1","2","3","1-2","2-3","3-1","2-1","3-2","1-3","1-2-3","2-3-1","3-1-2"] 最佳答案 函数式方法:bs="1-2-3".split("-")strings=1.upto(bs.
在尝试解决“网格上的路径”问题时,我编写了代码defpaths(n,k)p=(1..n+k).to_ap.combination(n).to_a.sizeend代码工作正常,例如ifn==8andk==2代码返回45,这是正确的路径数。但是,当使用较大的数字时,代码非常慢,我正在努力想出如何加快这个过程。 最佳答案 与其构建组合数组只是为了计算它,不如编写function定义组合的数量。我敢肯定还有包含此功能和许多其他组合函数的gem。请注意,我使用的是gemDistribution对于Math.factorial方法,但这是另一种
对于一个电子商务应用程序,我试图将选项的散列(每个选项都有一系列选择)转换为代表这些选择组合的散列数组。例如:#Input:{:color=>["blue","grey"],:size=>["s","m","l"]}#Output:[{:color=>"blue",:size=>"s"},{:color=>"blue",:size=>"m"},{:color=>"blue",:size=>"m"},{:color=>"grey",:size=>"s"},{:color=>"grey",:size=>"m"},{:color=>"grey",:size=>"m"}]Input内部可能有额
目录一、inout在设计文件中的使用方法1.1、inout的第一种使用方法1.2、inout实现的第二种使用方法1.3、inout使用总结 二、inout在仿真测试中的使用方法一、inout在设计文件中的使用方法在FPGA的设计过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号)。比如,IIC总线中的SDA信号就是一个双向信号,QSPIFlash的四线操作的时候四根信号线均为双向信号。在Verilog中用关键字inout定义双向信号,这里总结一下双向信号的处理方法。1.1、inout的第一种使用方法 实际上,双向信号的本质是由一个三态门组成的,三态门可以输出高电平,低电
文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分
我有一个PORO(普通旧Ruby对象)来处理一些业务逻辑。它接收一个ActiveRecord对象并对其进行分类。为了简单起见,以下面为例:classClassificatorSTATES={1=>"Positive",2=>"Neutral",3=>"Negative"}definitializer(item)@item=itemenddefnameSTATES.fetch(state_id)endprivatedefstate_idreturn1if@item.value>0return2if@item.value==0return3if@item.value但是,我还想根据这些st
我大胆猜测将一个数组拼成另一个数组比将两个数组加在一起更快,但经过快速基准测试后我发现我错了。我假设解释器只会将splat转换为数组文字,而不必每次都对其调用+方法。那么,为什么+比splat更快?我使用了这个基准代码:deftest(trials=1000)head=[1,2,3]tail=100.times.to_at=Time.now.to_ftrials.timesdo|i|a=[head,*tail]endputs"splatdonein#{Time.now.to_f-t}"t=Time.now.to_ftrials.timesdo|i|a=head+tailendputs"