作者di7101483 (d)
看板Electronics
标题[问题] 请大家帮我看一个verilog小程式
时间Sun Nov 16 23:07:25 2014
小弟又来问问题了= =
下面是我自己写用verilog写的小程式,在Quartus ii 中 compilation一直没过
找了老半天都看不出哪里错了,可以帮我看一下哪里出错吗?
module parallel_2_to_2(c0,A,B,F);
input c0;
input A;
input B;
output F;
reg F;
always @ (posedge c0 or negedge c0 );
begin
if (posedge c0)
F <= A;
else
F <= B;
end
endmodule
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.118.240.42
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Electronics/M.1416150448.A.D39.html
1F:推 evoker1984: reset clock same source 11/16 23:19
请问是要加上什麽东西吗? 不太懂耶@@ 我是这几天刚才学的新手....
※ 编辑: di7101483 (140.118.240.42), 11/16/2014 23:25:09
2F:推 tkhan: 如果哪里错都看不出来,建议千万别进这行.. 11/16 23:46
3F:推 ptta: always那行 最後为何要加; 11/17 00:05
4F:→ di7101483: 对吼 不用加; 11/17 00:22
我把code改成这样 还是不会过耶
module parallel_2_to_2(c0,A,B,F,reset);
input c0;
input A;
input B;
input reset;
output F;
reg F;
always @ (posedge c0 or negedge reset)
begin
if (!reset)
F <= A;
end
always @ (negedge c0 or negedge reset)
begin
if (!reset)
F <= B;
end
endmodule
※ 编辑: di7101483 (140.118.240.42), 11/17/2014 00:24:24
※ 编辑: di7101483 (140.118.240.42), 11/17/2014 00:25:18
※ 编辑: di7101483 (140.118.240.42), 11/17/2014 00:25:53
5F:→ TripleC: 你的reset是negative 1 还是 positive 1? 11/17 00:36
reset是我刚刚去看范例模仿别人写的程式
我这几天看了老半天,其实我不太了解reset的意义和怎麽写
请问reset是negative 1 或 positive 1 跑出来的结果会不一样吗?
请问reset是一定要有的吗?
※ 编辑: di7101483 (140.118.240.42), 11/17/2014 00:43:00
我不懂e大说的 reset clock same source耶
尝试一些写法都失败...
※ 编辑: di7101483 (140.118.240.42), 11/17/2014 00:47:41
6F:→ TripleC: 你先把你的waveform画出来, 想一下你写的code和waveform 11/17 01:26
我一开始是先画waveform才开始写的
我已经用altpll把c0,A,B这几个讯号画出来了
但是主要执行的这个程式没办法跑,翻了几本书也找不到出个所以然...
※ 编辑: di7101483 (140.118.240.42), 11/17/2014 01:35:28
7F:推 pbzw: 针对你改过的code,一个输出只能在一个always区块出现 11/17 01:49
8F:→ di7101483: 了解 感谢你 11/17 01:50
9F:→ di7101483: 但是一开始PO的程式的问题我还没找出来...好奇怪 11/17 02:07
10F:推 pbzw: 不能用同一个讯号源做正负缘触发 11/17 02:18
11F:→ pbzw: ,你有看过可以这样的正反器吗? 11/17 02:18
我刚刚也有想过是不是这个问题
但是我把code改成下面这样後还是不行耶@@
module parallel_2_to_2(c0,c1,A,B,F);
input c0;
input c1;
input A;
input B;
output F;
reg F;
always @ (posedge c0 or negedge c1 )
begin
if (posedge c0)
F <= A;
else
F <= B;
end
endmodule
※ 编辑: di7101483 (140.118.240.42), 11/17/2014 02:34:02
12F:推 pbzw: if的概念是多工器,你要他做边缘触发? 11/17 02:36
我把程式改成这样
就可以了....
module parallel(c0,c1,A,B,F);
input c0;
input c1;
input A;
input B;
output F;
reg F;
always @ (posedge c0 or negedge c1 )
begin
if (!c1)
F <= A;
else
F <= B;
end
endmodule
但是我想问 always里面的!c1 是让c1做负缘触发(negedge c1)吗?
※ 编辑: di7101483 (140.118.240.42), 11/17/2014 03:32:12
13F:推 Baneling: 建议先把combination跟sequential搞清楚... 11/17 04:50
14F:→ s940556: 建议你要了解async. reset的原理,当然新手先看书范例先 11/17 09:57
15F:→ s940556: 。目前你的问题(syntax)应该是可以自己解决的。还是学生 11/17 09:57
16F:→ s940556: 的话去旁听或选修相关的课程是一个不错的开始,祝你学习 11/17 09:57
17F:→ s940556: 顺利。 11/17 09:57
18F:→ xanter: 你有修过逻辑设计!? 11/17 19:27
19F:推 guilt666: 基本上verilog当C写',这样入门怎样都不会进步 11/18 15:46
20F:→ guilt666: 你应该知道你要描述的逻辑电路长怎麽样 11/18 15:47
21F:→ guilt666: 再来讨论你要怎麽描述那样的电路 连电路长怎样都不知道 11/18 15:47
22F:→ guilt666: 你还是先去修数位逻辑吧 台科 很多老师都有上 11/18 15:48