這個星期做eda的課程設計,終於得用vhdl寫一些東西了,而不僅僅是實驗課的時候那樣十幾行就能解決了。
寫長一點的時候,發現兩個相當棘手的禁令啊:
1、乙個程序內不能進行兩次邊沿檢測。正因為這兩條「禁令」,讓本來看上去很簡單的東西搞得我焦頭爛額了。2、不同程序不能對同一訊號進行賦值。
於是,我打算把事情簡單化,做了兩個這樣的練習:
1、兩個按鍵,分別控制乙個值的加和減。(這個主要是為了解決「禁令1」)我先做的是第二個練習。如果沒有禁令,我的想法是,乙個程序內檢測到按鍵訊號上公升沿的時候對訊號a寫『1』,然後另外乙個程序檢測到訊號a為『1』時開始用時鐘訊號計時並輸出,到時間後對這個訊號a寫『0』。看上去十分簡單,天衣無縫,但是因為「禁令2」,這個簡單的方法不能實現。2、乙個按鍵,按下按鍵輸出乙個固定時間脈衝。(解決「禁令2」)
我的解決方法是用了兩個訊號,並且還有優先順序的區別:
1library ieee;
2 use ieee.std_logic_1164.all;3
4entity keyclk is
5port(
6 clk:in
std_logic
;7 c_in:in
std_logic
;8 c_out:out
std_logic9);
10end;
1112 architecture one of keyclk is
13signal out_flag,stop_flag:std_logic;14
begin
1516
17process
(c_in,out_flag)
18begin
19if c_in='1'
then
20 out_flag<='1'
;
21 elsif stop_flag='1'
then
22 out_flag<='0'
;23endif;24
endprocess;25
26 c_out<=in_flag;
2728
process
(clk,in_flag)
29variable cnt:integer
range0to
100;
30begin
31if
rising_edge(clk) then
32if out_flag='1'
then
33 stop_flag<='0'
;34if cnt<5
then
35 cnt := cnt+1;36
37else
38 cnt := 0
;39 stop_flag<='1'
;40endif;41
endif;42
endif;43
endprocess;44
end;
第二個練習是這樣的,貌似有點糾結:
1library
ieee;
2use ieee.std_logic_1164.all;3
use ieee.std_logic_unsigned.all;4
5entity twokey is
6port
(7 clk:in
std_logic
;8 key1,key2:in
std_logic
;9 key_rst:in
std_logic
;10 qout:out
std_logic_vector(7
downto0)
11);
12end
entity;13
14architecture one of twokey is
15signal key1_down,key2_down:std_logic;16
signal qout2:std_logic_vector(7
downto0);
17begin
18process
(key1,key2,key_rst,clk)
19begin
20if
rising_edge(clk) then
21if key_rst='1'
then
22 qout2<=(others=>'0'
);23
else
24if key1='1'
and key1_down='0'
then
25 key1_down<='1'
;26 qout2<=qout2+'1'
;27 elsif key1='0'
then
28 key1_down<='0'
;29endif;30
if key2='1'
and key2_down='0'
then
31 key2_down<='1'
;32 qout2<=qout2-'1'
;33 elsif key2='0'
then
34 key2_down<='0'
;35endif;36
endif;37
endif;38
endprocess
;39 qout<=qout2;
40end;
解決了兩個sql問題
friday february 17,2006 05 24pm cst 1。decode 不僅僅針對固定值 case when b.aggregateno is null or b.aggregateno then customerid else b.aggregateno end 也可以寫成 de...
今天通過GG解決了兩個問題
1.svn的show log功能發生錯誤。svn 遇到不可讀的路徑 解決辦法 在conf serve.conf中,設定 anon access none 2.專案檔案 已被重新命名或已不在解決方案中 遇到問題的解決方案是乙個web解決方案,按照網上說的新增引用後,問題依舊。聯絡到我以前建過乙個sil...
解決兩個問題
早上一開啟虛擬機器登入ubuntu,就遇到兩個問題,2 登入進去後,ubuntu的工作列不見了。解決方案 1 對於第乙個問題,使用如下命令 sudo chmod 755 r home 使用者名稱 chmod 644 home 使用者名稱 dmrc 2 對於第二個問題,1,安裝gnome panel ...