Пн окт 01, 2012 13:05:28
Пн окт 01, 2012 14:05:14
Пн окт 01, 2012 14:09:33
Пн окт 01, 2012 14:36:43
Пн окт 01, 2012 14:40:50
Вт окт 02, 2012 08:24:12
Вт окт 02, 2012 09:13:09
Тут хорошо идёт С-шная тернарная операция ?:Nevox писал(а): DAT0 = TRI(D0,!CS&!RD); % сигнал с выхода трехразрядного буфера TRI подается на I/O порт %
...
DAT7 = TRI(D7,!CS&!RD);
assign DAT = !CS && !RD ? D : 8bz;
Тут posedge WR если запись в регистр по фронту WR. По фрагменту AHDL получается, что запись по спаду, так что negedge. Сброс низким уровнем на RESETNevox писал(а): % соединение порта D защелок с DAT[]&RESET %
IN_REG[8..1].D = DAT[7..0]; % соединения выполняются одновременно %
IN_REG[].CLK = LCELL(!WR);
IN_REG[8..1].ENA = (!CS&(A[]==8));
IN_REG[].CLRN = LCELL(RESET);
always @(negedge WR or negedge RESET)
begin
if (RESET == 0)
INREG <= 0;
else if (!CS && A == 8)
INREG <= DAT;
end
Вт окт 02, 2012 09:28:14
Вт окт 02, 2012 09:57:01
wire [7:0] D;
assign D = A[3:0] == 0 ? 8'd32 :
A[3:0] == 1 ? 8'd28 :
A[3:0] == 2 ? 8'd8 :
A[3:0] == 3 ? 8'd8 :
A[3:0] == 4 ? 0 :
A[3:0] == 5 ? 0 :
A[3:0] == 6 ? 0 :
A[3:0] == 7 ? 0 :
A[3:0] == 8 ? IN_REG :
0; // но ведь в оставшихся случаях тоже 0, зачем в исходном для 4..7 отдельно было?
reg [7:0] D_reg;
assign D = D_reg; // ну или тут тоже через ?: третье состояние врезать или что другое
// Или сразу объявить D регистром, триггера тут не будет, если не забіть про
// default. Если забыть, получится LATCH
always @(*)
case (A[3:0])
0: D_reg = 8'd32;
1: D_reg = 8'd28;
2: D_reg = 8'd8;
3: D_reg = 8'd8;
8: D_reg = IN_REG;
default: D_reg = 0;
endcase
Вт окт 02, 2012 10:00:27
Вт окт 02, 2012 15:15:02
Ср окт 03, 2012 08:03:42
Пт окт 05, 2012 20:01:31
Nevox писал(а): assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bz;
assign OUT[8:1]=(INREG[8:1])?0:8'bz;
Пт окт 05, 2012 22:45:05
Std 1364-2001 писал(а):2.5.1 Integer constants
If the size of the unsigned number is smaller than the size specified for the constant, the unsigned number shall be padded to the left with zeros. If the leftmost bit in the unsigned number is an x or a z, then an x or a z shall be used to pad to the left respectively.
Ср окт 10, 2012 14:48:19
Ср окт 10, 2012 22:38:45
always @(negedge WR or negedge RESET)
if (!RESET)
IN_REG <= 0;
else if (!CS) begin
if (A == 8) IN_REG[ 7:0] <= DAT;
if (A == 9) IN_REG[13:8] <= DAT[5:0];
end
Ср окт 10, 2012 23:12:47
D[7..0] = (32&(A[3..0]==0))#
(23&(A[3..0]==1))#
(14&(A[3..0]==2))#
(8&(A[3..0]==3))#
(10&(A[3..0]==4))#
(0&(A[3..0]==5))#
(0&(A[3..0]==6))#
(0&(A[3..0]==7))#
(IN_REG[7..0]&(A[3..0]==8))#
((gnd,gnd,IN_REG[13..8])&(A[3..0]==9))#
((gnd,gnd,gnd,gnd,CTR,gnd,gnd,vcc)&(A[3..0]==11));
TABLE
opt_hdiv[] => hdmod[];
B"11" => HDMOD_100ms;
B"10" => HDMOD_150ms;
B"01" => HDMOD_200ms;
B"00" => HDMOD_300ms;
END TABLE;
sequ.(clk,reset) = (Clk,Reset);
CASE sequ IS
WHEN Idle =>
IF CyReq THEN sequ = CYras;
ELSIF RefEn & RefReq THEN sequ = RFcas;
ELSE sequ = Idle;
END IF;
WHEN CYras => sequ = CYmux;
WHEN CYmux => sequ = CYcas;
...
Пт окт 19, 2012 08:47:12
SUBDESIGN 16OUT
(
WR : INPUT;
RD : INPUT;
CS : INPUT;
DAT[7..0]: BIDIR;
A[3..0] : INPUT;
IN[15..0]: INPUT;
)
VARIABLE
D[7..0] : NODE;
BEGIN
D[7..0] = (16&(A[3..0]==0))#
(33&(A[3..0]==1))#
(16&(A[3..0]==2))#
(8&(A[3..0]==3))#
(0&(A[3..0]==4))#
(0&(A[3..0]==5))#
(0&(A[3..0]==6))#
(0&(A[3..0]==7))#
(IN[7..0]&(A[3..0]==8))#
(IN[15..8]&(A[3..0]==9));
DAT0 = TRI(D0,!CS&!RD);
DAT1 = TRI(D1,!CS&!RD);
DAT2 = TRI(D2,!CS&!RD);
DAT3 = TRI(D3,!CS&!RD);
DAT4 = TRI(D4,!CS&!RD);
DAT5 = TRI(D5,!CS&!RD);
DAT6 = TRI(D6,!CS&!RD);
DAT7 = TRI(D7,!CS&!RD);
END;
module SN_DVV_16_24_V (IN,WR,RD,CS,DAT,A);
input wire [3:0] A;
input wire [15:0]IN;
input wire WR, RD, CS;
inout [7:0] DAT;
reg [7:0] D;
assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bz;
always @(negedge RD)
case (A)
4'b0000: D = 8'b00010000;
4'b0001: D = 8'b00100001;
4'b0010: D = 8'b00010000;
4'b0011: D = 8'b00001000;
4'b1000: D = IN[7:0];
4'b1010: D = IN[15:8];
default: D = 8'b00000000;
endcase
endmodule
Пт окт 19, 2012 13:11:31
always @(*) // * - любое изменение любого сигнала
case (A)
4'b0000: D = 8'b00010000;
4'b0001: D = 8'b00100001;
4'b0010: D = 8'b00010000;
4'b0011: D = 8'b00001000;
4'b1000: D = IN[7:0];
4'b1010: D = IN[15:8];
default: D = 8'b00000000;
endcase
Ср дек 19, 2012 07:56:21
SUBDESIGN SN_DVV_14_220V
(
RES, INT : INPUT;
WR : INPUT;
RD : INPUT;
CS : INPUT;
DAT[7..0]: BIDIR;
A[3..0] : INPUT;
IN[13..0]: INPUT;
)
VARIABLE
D[7..0] : NODE;
BEGIN
D[7..0] = (16&(A[3..0]==0))#
(35&(A[3..0]==1))#
(14&(A[3..0]==2))#
(8&(A[3..0]==3))#
(0&(A[3..0]==4))#
(0&(A[3..0]==5))#
(0&(A[3..0]==6))#
(0&(A[3..0]==7))#
(IN[7..0]&(A[3..0]==8));
D[5..0] = (IN[13..8]&(A[3..0]==9));
DAT0 = TRI(D0,!CS&!RD);
DAT1 = TRI(D1,!CS&!RD);
DAT2 = TRI(D2,!CS&!RD);
DAT3 = TRI(D3,!CS&!RD);
DAT4 = TRI(D4,!CS&!RD);
DAT5 = TRI(D5,!CS&!RD);
DAT6 = TRI(D6,!CS&!RD);
DAT7 = TRI(D7,!CS&!RD);
END;