verilog 코딩 해석좀 부탁드리겠습니다~ㅠㅠ
과제를 하는데 코딩 해석을 못하겠습니다.
조금이라두 좋으니 해석좀 부탁드리겠습니다ㅠ 도와주세요~ㅠ
///////////////top module////////////////////
module signal_control(reset,q0,q1,clk );
input clk, reset;//clock은 50Mhz
output [2:0]q0,q1;
reg [2:0] q0,q1;
parameter a=28'b101111101011110000100000000,//2초
b=30'b11101110011010110010100000000,//10초
s0 =3'b000,
s1 =3'b001,
s2 =3'b010,
s3 =3'b011;
reg [2:0] cs;
reg [29:0] count;
//시간을 측정하기 위한 것. 크기는 시간 bit보다 크면 됨.
////////////////count 파라메터를 다음상태 저장과 상태 변화
////module에서 같이 사용하므로,
///////moore에서는 3개의 block을 사용하지만 count파라메터가 겹치게 되므로,
/////////한꺼번에 같은 모둘에 다음상태 저장과 상태 변화를 해준다.
always @(posedge clk or negedge reset)
begin
if(!reset)
//negative edge reset에서 현 상태와 count 시간 초기화
begin
cs<=s0;
//cs와 count는 같이 변화하여야 하므로 non-blocking으로 해준다. 병렬적으로 동시에 변화
count<=0;
end
else//positive edge clock 에서 상태 변화
case (cs)
s0 : if(count < b)
count=count+1;
//1은 여기서, de2보드의 50Mhz마다 증가하는 값이다. 따라서,
else//50M번 더해져야 1초가 됨.
begin
count<=0;
cs<=s1;
end
s1 : if(count < a)
count=count+1;
else
begin
count<=0;
cs<=s2;
end
s2 : if(count
count=count+1;
else
begin
count<=0;
cs<=s3;
end
...
전 VHDL 을 배워서 베릴로그 코드를 볼줄은 모릅니다---만
간단한 카운터 코드네요.
포지티브 엣지 = 상승 에지일때 다음 코드 실행 :
만약 목표치 (a, b)보다 카운트가 작다면
카운트에 +1 을 하고 저장
그 이외의 경우 ( == 카운트가 크다면)
카운트를 리셋하고
cs 에 s* 를 저장
중요한 부분은 이런식으로 돌아갑니다.
10초 출력 2초출력 이런식으로 계속 돌아가는 코드일테죠?
코드는 좀 잘린거 같네요.
조금만 생각하면 금방 알수 있는 코드입니다.
헤메이시는 부분이 어딘지 알수 있으면 좀더 설명 드릴수 있을텐데요...
댓글 달기